如何在Razor助手中使用UrlHelper?

时间:2010-12-23 22:08:05

标签: asp.net-mvc razor helper

我正在尝试创建一个像这样的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的最简洁方法是什么?我应该新推出内联吗?

3 个答案:

答案 0 :(得分:30)

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>
}

希望得到这个帮助。

答案 1 :(得分:7)

我试图做同样的事情并找到了这篇文章。

我使用@VirtualPathUtility.ToAbsolute("~/foo/bar.jpg")代替@Url.Content("~/foo/bar.jpg")

解决了我的问题

由于@VirtualPathUtility.ToAbsolute()是静态的,因此无处不在。另外,我没有添加任何引用或任何内容,它在我的Razor视图中开箱即用。

如果您需要使用@Url.Action@Url.RouteUrl,您可能希望找到真实的UrlHelper ...但是对于@Url.Content(我就是这样)试图使用),@VirtualPathUtility.ToAbsolute()效果很好!

答案 2 :(得分:0)

    @helper Render(IEnumerable<MyItem> items,UrlHelper url) {
  <ul>
    @foreach (var item in items) {
      <li><a href="@url.Content(item.Url)">Click</a></li>
    }
  </ul>
}