为什么我找不到RadioButtonFor方法?

这是我的静态类:

using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using System.Linq.Expressions; using System.Text; using System.Web; namespace Foo.WebUI.Infrastructure { public static class HtmlHelpers { public static MvcHtmlString Image(this HtmlHelper helper, string src, string altText) { var builder = new TagBuilder("img"); builder.MergeAttribute("src", src); builder.MergeAttribute("alt", altText); return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing)); } public static MvcHtmlString RadioButtonForEnum(this HtmlHelper htmlHelper, Expression<Func> expression) { var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); var names = Enum.GetNames(metaData.ModelType); var sb = new StringBuilder(); foreach (var name in names) { var id = string.Format( "{0}_{1}_{2}", htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix, metaData.PropertyName, name ); //---------------------------------------ERROR HERE!----------------------------- var radio = htmlHelper.RadioButtonFor(expression, name, new { id = id }).ToHtmlString(); sb.AppendFormat( " {2}", id, HttpUtility.HtmlEncode(name), radio ); } return MvcHtmlString.Create(sb.ToString()); } } } 

当我编译它时,我收到此错误:

‘System.Web.Mvc.HtmlHelper’不包含’RadioButtonFor’的定义,并且没有扩展方法’RadioButtonFor’接受类型为’System.Web.Mvc.HtmlHelper’的第一个参数’(你是否缺少using指令)或汇编参考?

我从这个答案中得到了这个辅助方法:

将枚举传递给html.radiobuttonfor MVC3

InputExtensions.RadioButtonFor扩展方法位于System.Web.Mvc.Html命名空间中,因此您需要为此命名空间添加using子句

using System.Web.Mvc.Html;添加using System.Web.Mvc.Html; 到你的代码顶部

RadioButtonForEnum方法不是HtmlHelper类的一部分,它是一个扩展。 您必须包含扩展类所在的命名空间:

 using System.Web.Mvc.Html; 

您可以在方法的文档页面上看到要使用的命名空间。

为了使其始终可访问,您可以在Views\Web.config文件中添加对HtmlHelper namspace的引用,如下所示,以便始终可以从视图中看到它,而不必每次都包含它。