【发布时间】:2011-06-10 07:09:18
【问题描述】:
我试图在我的 App_Code 文件夹中为 MVC 3 RTM 项目创建 Razor 声明性帮助程序。
我遇到的问题是 MVC HtmlHelper 扩展(如 ActionLink)不可用。这是因为编译后的助手派生自System.Web.WebPages.HelperPage,虽然它公开了Html 属性,但它的类型是System.Web.WebPages.HtmlHelper,而不是System.Web.Mvc.HtmlHelper。
我遇到的错误类型的一个例子是:
'System.Web.Mvc.HtmlHelper' 没有 包含“ActionLink”的定义 并且没有扩展方法'ActionLink' 接受类型的第一个参数 'System.Web.Mvc.HtmlHelper' 可能是 找到(您是否缺少使用 指令还是程序集引用?)
我唯一的解决方案是创建自己的 HelperPage 并覆盖 Html 属性:
using System.Web.WebPages;
public class HelperPage : System.Web.WebPages.HelperPage
{
// Workaround - exposes the MVC HtmlHelper instead of the normal helper
public static new HtmlHelper Html
{
get { return ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html; }
}
}
然后我必须在每个助手的顶部写下以下内容:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
这意味着在 MVC 3 中这么难,还是我做错了什么?
【问题讨论】:
-
如果您还需要 Url 助手,您可以将这行代码添加到 HelperPage: public static UrlHelper Url { get { return new UrlHelper(Html.ViewContext.RequestContext); } }
标签: asp.net-mvc asp.net-mvc-3 razor