Как использовать UrlHelper из помощника Razor? - PullRequest
23 голосов
/ 24 декабря 2010

Я пытаюсь создать хелпер 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 ]

30 голосов
/ 24 декабря 2010

Синтаксис для ASP.Net MVC Синтаксис репитера Фила Хаака с использованием 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>
}

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

7 голосов
/ 28 февраля 2011

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

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

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

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

0 голосов
/ 06 февраля 2013
    @helper Render(IEnumerable<MyItem> items,UrlHelper url) {
  <ul>
    @foreach (var item in items) {
      <li><a href="@url.Content(item.Url)">Click</a></li>
    }
  </ul>
}
...