我目前正在开发一个MVC 5项目,该项目将有几个控制器,其中一个(InformationController)只对所有操作执行相同的操作,即:
public ActionResult ActionName()
{
LayoutModel Model = new LayoutModel();
return View(Model);
}
是否可以在一个泛型操作中捕获所有操作?这样就可以在不重新编译的情况下添加新视图。再说一遍,传递的模型总是LayoutModel
,并且永远不会有任何参数。
答案 0 :(得分:6)
这对你有用。创建一个新路由,以便该控制器不需要该操作,而是传递视图名称:
routes.MapRoute(
name: "InformationControllerSharedAction",
url: "Information/{actionType}",
defaults: new { controller = "Information", action = "Index" }
);
然后使用您的索引操作,您现在基本上传递了要渲染的视图:
public ActionResult Index(string actionType)
{
LayoutModel Model = new LayoutModel();
return View(actionType, model);
}
这将允许以下网址:
www.website.com/Information/View1
www.website.com/Information/View2
etc.
您需要做的就是将视图(View1.cshtml
,View2.cshtml
等)放到正确的文件夹中。
答案 1 :(得分:0)
在 Global.asax 中注册路由(在App_Start / RouteConfig.cs中添加路由),以便重定向到genric操作的所有操作
routes.MapRoute(
name: "Test",
url: "{Home}/{test}/{id}",
defaults: new { controller = "Home", action = "Genric", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Test1",
url: "{Home}/{test1}/{id}",
defaults: new { controller = "Home", action = "Genric", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Test2",
url: "{Home}/{test2}/{id}",
defaults: new { controller = "Home", action = "Genric", id = UrlParameter.Optional }
);