gpt4 book ai didi

c# - 使用枚举和 Entity Framework 脚手架从模型创建下拉列表?

转载 作者:行者123 更新时间:2023-11-30 21:51:26 24 4
gpt4 key购买 nike

如果模型具有枚举属性, Entity Framework 是否有办法自动在 HTML 中创建下拉列表?这是我目前在我的模型中拥有的内容,但在运行我的项目时,只有一个文本框而不是下拉列表!

public enum MajorList { Accounting, BusinessHonors, Finance, InternationalBusiness, Management, MIS, Marketing, SupplyChainManagement, STM }
[Display(Name = "Major")]
[Required(ErrorMessage = "Please select your major.")]
[EnumDataType(typeof(MajorList))]
public MajorList Major { get; set; }

最佳答案

您可以更改您的 @Html.EditorFor 如下:

@Html.EnumDropDownListFor(model => model.Major, htmlAttributes: new { @class = "form-control" })

更新:

@StephenMuecke 在他的评论中确认 EnumDropDownListFor 仅在 MVC 5.1 中可用,因此另一种解决方案可能是使用 Enum.GetValues 方法获取枚举值。将该数据传递给您的 View 的一种选择是使用 ViewBag:

var majorList = Enum.GetValues(typeof(MajorList))
.Cast<MajorList>()
.Select(e => new SelectListItem
{
Value =e.ToString(),
Text = e.ToString()
});
ViewBag.MajorList=majorList;

或者将它作为一个属性添加到您的 ViewModel 中,以防您以这种方式工作。

稍后在您的 View 中您可以使用 DropDownList,如下所示:

@Html.DropDownListFor(model => model.Major, ViewBag.MajorList, htmlAttributes: new { @class = "form-control" })

根据这个post中的解决方案以下也应该工作:

@Html.DropDownListFor(model =>model.Major, new SelectList(Enum.GetValues(typeof(MajorList))))

另一种解决方案可以是创建您自己的 EnumDropDownListFor 帮助器(如果您想阅读更多有关此类解决方案的信息,请查看此 page):

using System.Web.Mvc.Html;

public static class HTMLHelperExtensions
{
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
);
}
}

通过这种方式,您可以按照我在回答开头建议的方式进行操作,只需要引用您使用扩展名声明静态类的命名空间:

@using yourNamespace 
//...

@Html.EnumDropDownListFor(model => model.Major, htmlAttributes: new { @class = "form-control" })

关于c# - 使用枚举和 Entity Framework 脚手架从模型创建下拉列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35638727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com