我正在开发一个有4个独立部分的网站,每个部分都有自己的控制器。这些控制器共享一些模型,但是根据调用它的控制器,模型会略微不同。
我想要关注的路线是{controller}/{model}/{id}/{action}
,因此我可以使用controller1/cars/5/edit
而不是controller1/editcar/5
。
有没有办法让我的控制器理解模型+动作组合并使用不同的ActionResults处理它们,或者我被迫在模型名称上使用ActionResult然后使用条件来确定要采取的操作? / p>
在Ruby中,我可以使用get "/controller1/cars/:id/edit" do
。我只是在MVC4中寻找类似的东西。
示例路径:
/controller1/cars
/controller1/cars/5
/controller1/cars/5/edit
/controller2/cars
/controller2/boats
答案 0 :(得分:1)
我认为这条路线符合您的需求。它需要在您的操作方法中使用一些聪明的逻辑,但应该为您提供处理它的工具。阅读我对行为的描述。
routes.MapRoute(
"Default", // Route name
"{controller}/{model}/{id}/{action}", // URL with parameters
new { controller = "Home", action = "View", id = UrlParameter.Optional } // Parameter defaults
);
Model
和id
将作为参数传递给您的操作方法。不幸的是,Model不会作为类型发送,而是作为字符串发送(您可以将其提供给Factory类)。/controller2/boats
),它将作为null传递给您的操作。这需要处理逻辑,但为您提供了处理它的工具。答案 1 :(得分:0)
感谢您的回复。我遇到这么多麻烦的原因是因为我无法弄清楚如何正确地将控制器与路径分开。这导致我的想法脱离了MVC标准,几乎试图实现控制器控制器。
当我最终偶然发现“区域”时,我很快意识到这就是我所需要的。我能够为我的网站的每个部分(或区域)添加一个区域,并且在每个区域内,我可以定义单独的控制器和视图,而我的模型保留在所有区域之外的共享目录中。这现在完美无缺。