我一直在关注这个教程http://blogs.msdn.com/b/stuartleeks/archive/2010/05/21/asp-net-mvc-creating-a-dropdownlist-helper-for-enums.aspx但我跑了进入错误"System.Web.Mvc.HtmlHelper不包含EnumDropDownListFor的定义".
模型:
public enum Codes
{
IBC2012,
IBC2009,
IBC2006,
FL2010,
CBC2007
}
public class Code
{
public int ID { get; set; }
public int Active { get; set; }
public string Description { get; set; }
public string Edition { get; set; }
public Codes Code { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public static MvcHtmlString EnumDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression)
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
IEnumerable<TEnum> values = Enum.GetValues(typeof(TEnum)).Cast<TEnum>();
IEnumerable<SelectListItem> items =
values.Select(value => new SelectListItem
{
Text = value.ToString(),
Value = value.ToString(),
Selected = value.Equals(metadata.Model)
});
return htmlHelper.DropDownListFor(
expression,
items
);
}
Run Code Online (Sandbox Code Playgroud)
HTML助手:
@Html.EnumDropDownListFor(model => model.Code.Codes)
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 25
您忘记将扩展方法放在视图内的范围内.这个EnumDropDownListFor
方法是在命名空间里面的一些静态类中定义的,对吧?
namespace AppName.SomeNamespace
{
public static class HtmlExtensions
{
public static MvcHtmlString EnumDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression)
{
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
您需要在要使用此帮助程序的视图中添加此命名空间:
@using AppName.SomeNamespace
@model MyViewModel
...
@Html.EnumDropDownListFor(model => model.Code.Codes)
Run Code Online (Sandbox Code Playgroud)
为避免将此using子句添加到所有Razor视图中,您还可以将其添加到文件的<namespaces>
部分~/Views/web.config
:
<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="AppName.SomeNamespace" />
</namespaces>
</pages>
</system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)
正如@ArhiChief在答案中暗示的那样,我的问题是:
using System.Web.WebPages.Html;
Run Code Online (Sandbox Code Playgroud)
代替:
using System.Web.Mvc;
Run Code Online (Sandbox Code Playgroud)
这两个都有定义,HtmlHelper
如果你添加错误的,你会得到这个错误.用正确的命名空间替换它将修复它.
归档时间: |
|
查看次数: |
29893 次 |
最近记录: |