Подтвердить что ты не робот

Как использовать UrlHelper из помощника Razor?

Я пытаюсь создать помощник 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 внутри помощника? Должен ли я добавить новую строку?

4b9b3361

Ответ 1

Синтаксис для синтаксиса ретранслятора ASP.NET MVC Phil Haack с использованием Razor ( MVC 3)? - Переполнение стека

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

Надеюсь на эту помощь.

Ответ 2

Я пытался сделать то же самое и нашел этот пост.

Я решил свою проблему, используя @VirtualPathUtility.ToAbsolute("~/foo/bar.jpg") вместо @Url.Content("~/foo/bar.jpg")

Так как @VirtualPathUtility.ToAbsolute() является статическим, он доступен везде. Кроме того, мне не нужно было добавлять какие-либо ссылки или что-то еще, это работало из коробки из моего представления Razor.

Если вам нужно использовать @Url.Action или @Url.RouteUrl, вы, вероятно, захотите найти реальный UrlHelper... но для @Url.Content (именно это я и пытался использовать), @VirtualPathUtility.ToAbsolute() отлично работает!

Ответ 3

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