razor在App_Code中使用ActionLink无效的解决方案
症状
CS1928: “System.Web.WebPages.Html.HtmlHelper”不包含“ActionLink”的定义,并且最佳扩展方法重载“System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper, string, string, object)”的某些参数无效
英语版:
'System.Web.Mvc.HtmlHelper' does not contain a definition for 'ActionLink' and no extension method 'ActionLink' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found (are you missing a using directive or an assembly reference?)
无效解决方案
添加命名空间 System.Web.Mvc.Html
提供错误解决方案的连接(顺带鄙视)
http://topic.csdn.net/u/20090409/10/9b1060c3-5731-4bc5-a820-06be8a257f26.html
http://0839it.net/2011/0225/36219.html
原因分析
普通的cshtml文件继承自 System.Web.WebPages.HtmlHelper 而不是 System.Web.Mvc.HtmlHelper
This is because the compiled helpers derive from System.Web.WebPages.HelperPage
, and though it exposes an Html
property, its of type System.Web.WebPages.HtmlHelper
rather thanSystem.Web.Mvc.HtmlHelper
.
解决方案
将App_Code中的cshtml显式继承自以下的类
using System.Web.Mvc; using System.Web.WebPages; namespace Test { 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; } } } }
然后在cshtml文件中加入以下内容
@inherits Test.HelperPage @using System.Web.Mvc.Html @using System.Web.Mvc
Enjoy
参考资料
http://stackoverflow.com/questions/4451287/razor-declarative-html-helpers/4453637#4453637