【发布时间】:2013-12-12 15:07:25
【问题描述】:
是否可以在不在控制器中创建操作的情况下获取/渲染视图?我有很多视图,我不需要传递任何模型或视图包变量,而且我认为,仅使用我的视图名称创建空操作是没有用的。
【问题讨论】:
-
使用什么 Url 模式访问这些视图?
标签: asp.net-mvc-4
是否可以在不在控制器中创建操作的情况下获取/渲染视图?我有很多视图,我不需要传递任何模型或视图包变量,而且我认为,仅使用我的视图名称创建空操作是没有用的。
【问题讨论】:
标签: asp.net-mvc-4
您可以创建自定义路由,并在通用控制器中处理它:
在您的 RouteConfig.cs 中:
routes.MapRoute(
"GenericRoute", // Route name
"Generic/{viewName}", // URL with parameters
new { controller = "Generic", action = "RenderView", }
);
然后像这样实现一个控制器
public GenericContoller : ...
{
public ActionResult RenderView(string viewName)
{
// depending on where you store your routes perhaps you need
// to use the controller name to choose the rigth view
return View(viewName);
}
}
那么当请求这样的url时:
http://..../Generic/ViewName
将呈现具有提供的名称的视图。
当然,您可以对这个想法进行修改以适应您的情况。例如:
routes.MapRoute(
"GenericRoute", // Route name
"{controller}/{viewName}", // URL with parameters
new { action = "RenderView", }
);
在这种情况下,你所有的控制器都需要实现一个RenderView,并且url是http://.../ControllerName/ViewName。
【讨论】:
在我看来这是不可能的,至少你可以创造的是
public ActionResult yourView()
{
return View();
}
【讨论】:
如果这些视图是对应于动作的视图的一部分的局部视图,您可以在主视图中使用@Html.Partial 来呈现不带动作的局部视图。
例如:
@Html.Partial("MyPartialName")
【讨论】: