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/4710853/using-mvc-htmlhelper-extensions-from-razor-declarative-views

http://stackoverflow.com/questions/4451287/razor-declarative-html-helpers/4453637#4453637

http://stackoverflow.com/questions/4866462/having-razor-helper-in-app-code-folder-using-asp-net-mvc-3

posted on 2011-07-17 19:51  大宝pku  阅读(2609)  评论(0编辑  收藏  举报

导航