如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章

[Asp.Net Core]NET5_Razor扩展01

[Asp.Net Core]NET5_Razor扩展01

Razor 声明性助手将模型作为参数传递

使用 Jquery (Razor) 添加 Html 助手

CodeIgniter资产目录字符串助手

如何使用 Url.Action 在 asp.net core 2.0 razor 页面中传递多个操作