Asp.net mvc 如何在App_代码文件夹的Razor视图中使用Url.Action

Asp.net mvc 如何在App_代码文件夹的Razor视图中使用Url.Action,asp.net-mvc,asp.net-mvc-4,razor,html-helper,razor-2,Asp.net Mvc,Asp.net Mvc 4,Razor,Html Helper,Razor 2,如何在应用程序代码文件夹中的Razor helper中使用Url.Action() 我试过了 但是有编译错误 CS0103:名称“Url”在当前上下文中不存在 使用ASP.NET MVC4和jquery。Html.Raw()使用HtmlHelper类,但Url.Action()则使用 @using System.Web.Mvc @helper Tabel(HtmlHelper html, UrlHelper url) { html.Raw(url.Action("Index", "Ho

如何在应用程序代码文件夹中的Razor helper中使用Url.Action()

我试过了

但是有编译错误

CS0103:名称“Url”在当前上下文中不存在

使用ASP.NET MVC4和jquery。

Html.Raw()
使用
HtmlHelper
类,但
Url.Action()
则使用

@using System.Web.Mvc
@helper Tabel(HtmlHelper html, UrlHelper url)
{ 
    html.Raw(url.Action("Index", "Home"))
}

这对我来说也很有效,但没有传递参数:

@helper Tabel()
{ 
    var html = ((System.Web.Mvc.WebViewPage)WebPageContext.Current.Page).Html;
    var url = ((System.Web.Mvc.WebViewPage)WebPageContext.Current.Page).Url;

    html.Raw(url.Action("Index", "Home"))
}

建议通过页面:
@helper Table(WebViewPage页面)
这样更好吗,不需要两个参数,Razor视图代码更短更容易阅读?如何像在扩展方法中那样远程此参数,在扩展方法中,
可以自动访问?看不出为什么不-
WebViewPage
Html
Url
作为公共属性公开(您只需要将其更改为
page.Html.Raw(page.Url.Action(…)
但是
@helper
并不是专门为这种用法设计的,我的建议是使用一个自定义的HtmlHelper扩展方法(它还有一个额外的好处,可以在一个单独的dll中编译它,并将它引用到多个项目中)Helper包含大量html代码。如果使用自定义扩展名,是否应使用StringBuilder创建html?在本例中如何使用VS html编辑、语法高亮显示、检查和自动格式化功能来创建Helper?当您说Helper包含大量html代码时,您是指您的Helper(您刚才简化了问题)?你能给我一个你生成的其他html的例子吗?还有一些创建html的例子。我的html与你提供的html例子类似。我更喜欢使用VS html编辑器而不是使用C代码来创建它们。因此我将使用Razor帮助器,并在所有项目中从App_code文件夹复制相同的帮助器文件。html e有时更改html后,编辑器会用红色下划线标记这些帮助程序。如何解决此问题,可以使用web.config中引用的App_代码帮助程序集或其他方式。
@helper Tabel()
{ 
    var html = ((System.Web.Mvc.WebViewPage)WebPageContext.Current.Page).Html;
    var url = ((System.Web.Mvc.WebViewPage)WebPageContext.Current.Page).Url;

    html.Raw(url.Action("Index", "Home"))
}