获取ASP.net MVC中View层中的当前URL

时间:2013-01-29 19:50:01

标签: c# asp.net-mvc web-applications

我在这里以及其他网站上已经阅读了一些以前的问题,但是对ASP.net和MVC不熟悉我在理解所提供的信息时遇到了一些麻烦。

我希望/需要/被告知通过View层获取我正在访问的页面的当前URL,并使用该信息将id应用于允许特定css的li标签。我们已经将左侧导航栏移动到每个页面(由之前的合作操作完成)中,以将列表放入我将在所有必需页面上调用的部分视图中。网站的样式要求在左侧导航中有一个特定的高亮显示用户当前所在页面的标记。

我读过的一些例子包括:

<%= Request.Url.PathAndQuery %>

Request.Url.ToString() or Request.Url.AbsoluteUri

var request = HttpContext.Current.Request

但我知道并非所有这些都可以在View层中使用。什么是最好的方法?是否还有任何人可以推荐的教程?

2 个答案:

答案 0 :(得分:6)

在我看来,使用这个URL可能不是最好的主意。

相反,快速简便的方法是使用ViewContext.RouteData,它将包含当前请求的控制器和操作的值。它可以从视图层轻松访问。

ViewContext.RouteData.Values["Controller"].ToString()
ViewContext.RouteData.Values["Action"].ToString()

因此,在您看来,您可以执行类似

的操作
<ul class="nav">
    <li class="@(ViewContext.RouteData.Values["Controller"].ToString() == "ControllerName" ? "active" : "")"><a href="#">Foo</a></li>
</ul>

你可以进一步推动它,使它更漂亮,但你得到了基本的想法。

答案 1 :(得分:2)

我一直在寻找针对asp.net 3.0的解决方案,发现以下内容可以直接访问URL路径(您当前正在加载/显示的页面):

ViewContext.HttpContext.Request.Path

我在if语句中使用它来动态地决定不同的“视图导入”,效果很好。