枚举下载MVC 5

Jas*_*mes 8 c# asp.net-mvc html-helper asp.net-mvc-5

我有一个nullable enum人名称的定义,并在人模型中使用.

public enum Titles
{
    Mr=0,
    Mrs=1,
    Miss=2,
    Dr=3
}
Run Code Online (Sandbox Code Playgroud)
[Required(ErrorMessage="Please supply the title.")]
[Display(Name = "Title")]
public Titles Title { get; set; }
Run Code Online (Sandbox Code Playgroud)

当我使用HTML Helper将此属性添加到创建或编辑视图中时

@Html.EnumDropDownListFor(model => model.Title)
Run Code Online (Sandbox Code Playgroud)

控件按预期使用其中的枚举值呈现.

但是,当我选择编辑现有人时,标题enum不会显示当前标题.它在顶部显示一个空条目DropDownList.

但是,如果我删除它nullable,它总是显示在第一项enum.

任何想法如何让我为我正在编辑的人DropDownList显示正确选择的enum项目?

非常感谢,

杰森.

bal*_*dre 8

我刚做了一个简单的测试.

你提到你有一个可以为空的Enum,但为此你需要 public Titles? Title { get; set; }

并使用此模型:

public class TestViewModel
{
    [System.ComponentModel.DataAnnotations.Required(ErrorMessage = "Please supply the title.")]
    [System.ComponentModel.DataAnnotations.Display(Name = "Title")]
    public Title? Title { get; set; }
}
public enum Title
{
    Mr = 0,
    Mrs = 1,
    Miss = 2,
    Dr = 3
}
Run Code Online (Sandbox Code Playgroud)

有了这个 ActionResult

public ActionResult Test()
{
    var model = new List<Models.TestViewModel>();

    model.Add(new TestViewModel() { Title = Title.Miss });
    model.Add(new TestViewModel() { Title = Title.Mrs });
    model.Add(new TestViewModel() { Title = null });

    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

并使用简单的HTML

@model List<Models.TestViewModel>
@{
    Layout = null;
}

<!DOCTYPE html>    
<html>
<head><title>Test</title></head>
<body>
    @for (int i = 1; i <= Model.Count; i++)
    {
        var title = Model[i-1];
        <div>
            <h2>Model @i</h2>
            @Html.LabelFor(x => title.Title)
            @Html.EnumDropDownListFor(x => title.Title)
            @Html.EditorFor(x => title.Title)
        </div>
    }
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

在此输入图像描述

女巫正是除了......你错过了我的例子吗?


Jus*_*tin 5

尝试将Title属性命名为其他内容,Title似乎是某种保留关键字.