Asp.net mvc 如何在.NET的MVC中执行与视图模型的枚举绑定?
如何将枚举绑定到MVC中的下拉列表中,以使模型在发布后有效? 不确定它是否需要转换器或其他东西,我提供了代码,您建议的解决方案是什么? 下面的代码导致ModelError 枚举: 模型: 控制器: 视图绑定:Asp.net mvc 如何在.NET的MVC中执行与视图模型的枚举绑定?,asp.net-mvc,enums,type-conversion,model-binding,Asp.net Mvc,Enums,Type Conversion,Model Binding,如何将枚举绑定到MVC中的下拉列表中,以使模型在发布后有效? 不确定它是否需要转换器或其他东西,我提供了代码,您建议的解决方案是什么? 下面的代码导致ModelError 枚举: 模型: 控制器: 视图绑定: 您还没有展示如何填充此时间列表集合。像这样尝试,它应该可以工作: public TimePlan TheTimePlan { get; set; } public IEnumerable<SelectListItem> TimeList { get {
您还没有展示如何填充此时间列表集合。像这样尝试,它应该可以工作:
public TimePlan TheTimePlan { get; set; }
public IEnumerable<SelectListItem> TimeList
{
get
{
var enumType = typeof(TimePlan);
var values = Enum.GetValues(enumType).Cast<TimePlan>();
var converter = TypeDescriptor.GetConverter(enumType);
return
from value in values
select new SelectListItem
{
Text = converter.ConvertToString(value),
Value = value.ToString(),
};
}
}
在您的视图中,使用帮助器:
@Html.DropDownListForEnum(x => x.TheTimePlan)
谢谢Darin,这就是我一直在寻找的,你能告诉我怎样才能添加一个请选择。。。在这些上面?我以前的方式在这里不起作用。当然,只需将其作为参数添加到帮助器中。我尝试了类似这样的测试:return htmlHelper.DropDownListForexpression,items,请从下面的列表中选择;但dropdownlist的选定索引始终为1而不是0。这是正常情况,枚举是值类型。如果您希望能够拥有这样的默认值,那么应该在视图模型中将其声明为可为null的枚举。
[HttpPost]
public virtual ActionResult Education(EducationViewModel EducationModelInfo)
{
if (ModelState.IsValid)
{ ...
} }
@Html.DropDownListFor(m => m.CourseTimePlan, Model.TimeList, "Please select the time plan")
public TimePlan TheTimePlan { get; set; }
public IEnumerable<SelectListItem> TimeList
{
get
{
var enumType = typeof(TimePlan);
var values = Enum.GetValues(enumType).Cast<TimePlan>();
var converter = TypeDescriptor.GetConverter(enumType);
return
from value in values
select new SelectListItem
{
Text = converter.ConvertToString(value),
Value = value.ToString(),
};
}
}
public static IHtmlString DropDownListForEnum<TModel, TEnum>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TEnum>> expression
)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var enumType = GetNonNullableModelType(metadata);
var values = Enum.GetValues(enumType).Cast<TEnum>();
var converter = TypeDescriptor.GetConverter(enumType);
var items =
from value in values
select new SelectListItem
{
Text = converter.ConvertToString(value),
Value = value.ToString(),
Selected = value.Equals(metadata.Model)
};
return htmlHelper.DropDownListFor(expression, items);
}
public TimePlan TheTimePlan { get; set; }
@Html.DropDownListForEnum(x => x.TheTimePlan)