为什么我找不到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的引用,如下所示,以便始终可以从视图中看到它,而不必每次都包含它。