我试图在我的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'的第一个参数'(你是否缺少using指令)或汇编参考?)
我唯一的解决方案是创建自己的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; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后我必须在每个助手的顶部写下面的内容:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
Run Code Online (Sandbox Code Playgroud)
它是否意味着在MVC 3中这么难,或者我做错了什么?
我正在升级到MVC4.我已按照http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806上的说明操作,但在我的Razor视图和布局中,我有类似的错误
我也有错误,如:
当我将鼠标悬停在@Html上时,我可以看到它的类型是System.Web.WebPages.Html.HtmlHelper而不是System.Web.Mvc.HtmlHelper
不确定其他信息是否相关,但这就是我所处的位置:
任何指针赞赏.
编辑: web.config中的所有引用和文件都升级为:
编辑(2): 在我的/views/web.config(或/views/shared/web.config,如果我在下面尝试@Paul的解决方案)中,我有自己的基类型,它继承自System.Web. Mvc.WebViewPage,包含库中的引用已更新为MVC4并转到定义带我到MVC4 dll.
新版本在这方面有什么变化吗?我在发行说明中看不到任何相关内容.
我正在使用ASP.net MVC的发布版本,我似乎得到了很多这个错误
'System.Web.Mvc.HtmlHelper' does not contain a definition for 'RenderPartial' and no extension method 'RenderPartial' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found (are you missing a using directive or an assembly reference?)
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为我可以浏览到System.Web.Mvc.HtmlHelper并且所有扩展方法都在那里.更奇怪的是我可以编译并且所有错误都消失了,但是一旦我再次开始编辑它们就会显示出来.我包括在内
<%@ Import Namespace="System.Web.Mvc" %>
<%@ Import Namespace="System.Web.Mvc.Html" %>
Run Code Online (Sandbox Code Playgroud)
在我的site.master文件中,我发现在某处,但似乎没有帮助.有任何想法吗?知识分子也没有找到扩展方法.