检测视图中的路径值

时间:2010-12-16 11:32:21

标签: asp.net-mvc model-view-controller partial-views

是否可以在视图中检测路线值?

例如/pages/create/1,我想查看1是否存在?

基本上,我想基于这个值渲染一个不同的局部视图,虽然我很确定这可能不是我想要实现的最佳方式。

在旁注中,我可以根据控制器中的值更改视图中呈现的部分视图,而不是执行上述操作吗?

3 个答案:

答案 0 :(得分:5)

ViewContext.RouteData.Values["whatever"]

答案 1 :(得分:1)

您可以通过RouteData检查ViewPage.ViewContext.RouteData对象。然后使用

之类的内容检查值
string areaname = routeData.Values["area"] as string;
string controllername = routeData.Values["controller"] as string;
string actionname = routeData.Values["action"] as string;
string id = routeData.Values["id"] as string;

如果您发现要在控制器中检查这些值,则可以使用ControllerBase.ControllerContext.RouteData访问它们。类似的东西适用于动作过滤器等​​。

答案 2 :(得分:1)

其他答案都是正确的,但我想我会解决你的最后一句:

  

在旁注中,我可以根据控制器中的值更改视图中呈现的部分视图,而不是执行上述操作吗?

使用以下代码在View本身中呈现部分视图(除非从JavaScript调用并直接绑定到DOM):

<%: Html.RenderPartial("SomePartial") %>

因此,为了防止视图中出现“代码汤”(if语句),您需要使用HTML帮助程序,在检查ViewContext后调用RenderPartial:

public static string RenderCustomPartial(this HtmlHelper helper, RouteData rd)
{
   string partialName;

   if (rd.Values["SomeParam"] == 1)
     partialName = "PartialOneName";
   else
     partialName = "PartialTwoName";

   return helper.RenderPartial(partialName);
}

然后在视图中:

<%: Html.RenderCustomPartial(ViewContext.RouteData) %>

你可以对上面做一些修改 - 比如直接在扩展中访问路径数据,通过模型来绑定部分等等 - 但是你明白了。

或者,您可以在控制器中执行上述IF语句,并将部分视图名称填充到ViewData中,然后在视图中的常规RenderPartial调用中使用它。

无论你的船漂浮着什么。 :)