如何在Razor助手中使用UrlHelper?

Mik*_*ike 23 asp.net-mvc helper razor

我正在尝试创建一个像这样的Razor助手:

@helper Render(IEnumerable<MyItem> items) {
  <ul>
    @foreach (var item in items) {
      <li><a href="@Url.Content(item.Url)">Click</a></li>
    }
  </ul>
}
Run Code Online (Sandbox Code Playgroud)

这里唯一的问题是System.Web.WebPages.HelperPage(Razor助手的基类)没有Url属性(类型为UrlHelper).它有Html(类型为HtmlHelper)但没有Url.

在帮助者中获取UrlHelper的最简洁方法是什么?我应该新推出内联吗?

小智 30

ASP.Net MVC的语法Phil Haack使用Razor(MVC 3)的Repeater语法?- 堆栈溢出

@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>
}
Run Code Online (Sandbox Code Playgroud)

或者,如果使用MVC3 RC2

@helper Render(IEnumerable<MyItem> items) {
  <ul>
    @foreach (var item in items) {
      <li><a href="@Href(item.Url)">Click</a></li>
    }
  </ul>
}
Run Code Online (Sandbox Code Playgroud)

希望这有帮助.


小智 7

我试图做同样的事情并发现这篇文章.

我通过使用@VirtualPathUtility.ToAbsolute("~/foo/bar.jpg")代替而解决了我的问题@Url.Content("~/foo/bar.jpg")

由于@VirtualPathUtility.ToAbsolute()是静态的,它随处可见.此外,我没有添加任何参考或任何东西,它从我的Razor视图开箱即用.

如果你需要使用@Url.Action或者@Url.RouteUrl,你可能想找到一个真实的UrlHelper...但是@Url.Content(这也是我试图使用的),@VirtualPathUtility.ToAbsolute()效果很好!