在ASP.net MVC中,如何在View层获取当前URL?

3

我已经阅读了这里和其他网站上的一些先前问题,但是由于我对ASP.net和MVC新手,我有点难以理解所呈现的信息。

我想/需要/被告知通过View层获取当前页面的URL,并使用该信息将id应用于li标签,以允许特定的CSS。我们已将左侧导航栏从嵌入每个单独页面(由先前的合作完成)移动到放置在我将调用所有必需页面的部分视图中的列表中。网站的样式要求具有特定的突出显示左侧导航页用户当前正在使用的页面的a标签。

我阅读过的一些示例包括使用:

<%= Request.Url.PathAndQuery %>

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

var request = HttpContext.Current.Request

但是我知道不是所有的都可以在视图层中使用。那什么方法最好?有没有任何教程是我还没有找到的,可以推荐给我吗?

2个回答

10

在我看来,使用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>
你可以进一步推进它,使它更漂亮,但你已经得到了基本的想法。

非常感谢,这正是我在寻找的!(编辑:哎呀,您给我展示了CSS部分) - MacSalty

5
我在寻找一个 ASP.NET 3.0 的解决方案,通过以下方法可以直接访问 URL 路径(即正在加载/显示的页面):
ViewContext.HttpContext.Request.Path

我在if语句中使用这个来动态决定不同的View Imports,效果非常好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接