如何在 Razor 助手中使用 UrlHelper?
Posted
技术标签:
【中文标题】如何在 Razor 助手中使用 UrlHelper?【英文标题】:How do I use UrlHelper from within a Razor helper? 【发布时间】:2011-05-30 04:45:24 【问题描述】:我正在尝试像这样创建一个 Razor 助手:
@helper Render(IEnumerable<MyItem> items)
<ul>
@foreach (var item in items)
<li><a href="@Url.Content(item.Url)">Click</a></li>
</ul>
这里唯一的问题是 System.Web.WebPages.HelperPage(Razor 助手的基类)没有 Url 属性(UrlHelper 类型)。它确实有 html(HtmlHelper 类型)但没有 Url。
在助手中获取 UrlHelper 的最干净的方法是什么?我应该内联新的吗?
【问题讨论】:
【参考方案1】:我尝试做同样的事情并找到了这篇文章。
我通过使用@VirtualPathUtility.ToAbsolute("~/foo/bar.jpg")
而不是@Url.Content("~/foo/bar.jpg")
解决了我的问题
由于@VirtualPathUtility.ToAbsolute()
是静态的,所以它随处可用。另外,我不必添加任何引用或任何内容,它在我的 Razor 视图中开箱即用。
如果您需要使用@Url.Action
或@Url.RouteUrl
,您可能希望找到一个真正的UrlHelper
...但对于@Url.Content
(这也是我尝试使用的),@987654328 @ 效果很好!
【讨论】:
【参考方案2】: @helper Render(IEnumerable<MyItem> items,UrlHelper url)
<ul>
@foreach (var item in items)
<li><a href="@url.Content(item.Url)">Click</a></li>
</ul>
【讨论】:
【参考方案3】:Syntax for ASP.Net MVC Phil Haack's Repeater syntax using Razor (MVC 3)? - Stack Overflow
@helper Render(IEnumerable<MyItem> items)
var url = new System.Web.Mvc.UrlHelper(Context.Request.RequestContext);
<ul>
@foreach (var item in items)
<li><a href="@url.Content(item.Url)">Click</a></li>
</ul>
或者,如果使用 MVC3 RC2
@helper Render(IEnumerable<MyItem> items)
<ul>
@foreach (var item in items)
<li><a href="@Href(item.Url)">Click</a></li>
</ul>
希望对您有所帮助。
【讨论】:
您链接到的答案不使用 UrlHelper...?以上是关于如何在 Razor 助手中使用 UrlHelper?的主要内容,如果未能解决你的问题,请参考以下文章