这是我的静态类:
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<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> 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(
"<label for=\"{0}\">{1}</label> {2}",
id,
HttpUtility.HtmlEncode(name),
radio
);
}
return MvcHtmlString.Create(sb.ToString());
}
}
}
当我编译它时,我收到此错误:
'System.Web.Mvc.HtmlHelper'不包含的定义 'RadioButtonFor'并没有扩展方法'RadioButtonFor'接受一个 “System.Web.Mvc.HtmlHelper”类型的第一个参数可以是 发现(您是否缺少using指令或程序集引用?
我从这个答案得到了这个辅助方法:
答案 0 :(得分:15)
InputExtensions.RadioButtonFor
扩展方法位于System.Web.Mvc.Html
命名空间中,因此您需要为此命名空间添加using
子句
答案 1 :(得分:0)
将using System.Web.Mvc.Html;
添加到代码顶部
答案 2 :(得分:0)
RadioButtonForEnum
方法不是HtmlHelper
类的一部分,它是一个扩展。您必须包含扩展类所在的命名空间:
using System.Web.Mvc.Html;
您可以在documentation page for the method上看到要使用的命名空间。
答案 3 :(得分:0)
为了使其始终可访问,您可以在Views\Web.config
文件中添加对HtmlHelper namspace的引用,如下所示,以便始终可以从您的视图中看到它,而不必每次都包含它。
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="My.HtmlHelper.Namespace" /> <!-- Added here -->
</namespaces>
</pages>
</system.web.webPages.razor>