C# 全捕获控制器

C# 全捕获控制器,c#,asp.net-mvc,asp.net-mvc-5.1,C#,Asp.net Mvc,Asp.net Mvc 5.1,我目前正在从事一个MVC 5项目,该项目将有多个控制器,其中一个(InformationController)正在对所有操作执行相同的操作,即: public ActionResult ActionName() { LayoutModel Model = new LayoutModel(); return View(Model); } 是否可以在一个通用操作中捕获所有操作?这样就可以在不重新编译的情况下添加新视图。再说一遍,传递的模型将始终是一个LayoutModel,并且永远

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

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

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

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 }
);

这应该对你有用。创建新路由,以便该控制器不需要该操作,而是传入视图名称:

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);
}
这将允许如下URL:

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

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

您的意思是要截取所有操作以执行某种预操作,还是只需要一个操作的应用程序?如果是后者,如果只有一个动作,一个视图,没有其他任何链接,你的用户怎么会要求其他路线?我想我知道你要走哪条路,但你需要解释更多,让我们了解你到底想用它实现什么。是的,对urlto.website.com/Information/ANYTHING的所有调用都应映射到相应的视图,并传递一个
布局模型
。我想大卫在下面说的是对的。但我还没有测试过,它很有效。但是我做了一些改变。这是因为如果您使用
@Url.Action(“Index”,“Information”)
作为子页面上的链接,例如
www.website.com/Information/View1
,则链接将指向
www.website.com/Information/View1
,因为您没有明确地将
actionType
设置为
Index
。我将路由默认值更改为
默认值:新建{controller=“Information”、action=“Forward”、actionType=“Index”}
,并将操作名称更改为Forward。然后,您需要避免使用“转发”作为子页面。这也可以通过在所有
@Url.Action
上显式添加
新{actionType=“index”}
来解决。