我目前正在研究一个MVC 5项目,该项目将具有多个控制器,其中一个(InformationController)仅对所有操作执行相同的操作,即:

public ActionResult ActionName()
{
    LayoutModel Model = new LayoutModel();
    return View(Model);
}


是否可以在一个通用动作中捕获所有动作?这样,无需重新编译就可以添加新视图。再说一遍,传递的模型将始终是LayoutModel,并且将永远没有任何参数。

最佳答案

这应该为您工作。创建一个新路由,以便该控制器不需要执行该操作,而是传递视图名称:

routes.MapRoute(
    name: "InformationControllerSharedAction",
    url: "Information/{actionType}",
    defaults: new { controller = "Information", action = "Index" }
);


然后,使用Index动作,您现在基本上传入了要渲染的视图:

public ActionResult Index(string actionType)
{
    LayoutModel Model = new LayoutModel();
    return View(actionType, model);
}


这将允许以下URL:

www.website.com/Information/View1
www.website.com/Information/View2
etc.


您所需要做的就是将视图(View1.cshtmlView2.cshtml等)放到正确的文件夹中。

10-04 22:30
查看更多