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