使用不同的ActionResult处理额外的MVC参数
本文关键字:MVC 参数 处理 ActionResult | 更新日期: 2023-09-27 17:58:54
我正在开发一个网站,该网站有4个单独的部分,每个部分都有自己的控制器。这些控制器共享一些模型,但是根据调用它的控制器,该模型会做一些稍微不同的事情
我想遵循的路线是{controller}/{model}/{id}/{action}
,所以我可以使用controller1/cars/5/edit
而不是controller1/editcar/5
。
有没有办法让我的控制器理解模型+操作的组合,并用不同的ActionResults处理它们,或者我是否被迫在模型名称上使用ActionResult,然后使用条件来确定要采取什么操作?
在Ruby中,我可以使用get "/controller1/cars/:id/edit" do
。我只是在MVC4中寻找类似的东西。
路由示例:
/controller1/cars
- (从控制器1返回包含所有汽车的视图)
/controller1/cars/5
- (从控制器1返回包含ID为5的汽车的视图)
/controller1/cars/5/edit
- (从控制器1返回一个视图以编辑ID为5的汽车)
/controller2/cars
- (从控制器2返回包含所有汽车的视图)
/controller2/boats
- (从控制器返回包含所有船只的视图2)
我认为这条路线符合您的需求。它需要你的行动方法中有一些巧妙的逻辑,但应该给你处理它的工具。阅读我对行为的描述。
routes.MapRoute(
"Default", // Route name
"{controller}/{model}/{id}/{action}", // URL with parameters
new { controller = "Home", action = "View", id = UrlParameter.Optional } // Parameter defaults
);
- 此路由将默认为一个名为View(可能用于显示)的操作,并有一个指向不同操作的选项
Model
和id
将作为参数传递给操作方法。不幸的是,Model不会作为类型发送,而是作为字符串发送(您可以将其输入到Factory类中)- 如果忽略if(例如
/controller2/boats
),它将作为null传递给您的操作。这需要逻辑来处理,但为您提供了处理它的工具
感谢您的回复。我之所以在这方面遇到这么多麻烦,是因为我不知道如何正确地将控制器与路由分开。这导致我的想法脱离了MVC标准,几乎试图实现一个控制器的控制器。
当我最终偶然发现"领域"时,我很快意识到这正是我所需要的。我可以为我的网站的每个部分(或区域)添加一个区域,在每个区域内,我可以定义单独的控制器和视图,而我的模型保留在所有区域之外的共享目录中。这现在非常有效。