枚举下载MVC 5

时间:2014-03-23 08:32:35

标签: c# asp.net-mvc asp.net-mvc-5 html-helper

我为个人标题定义了nullable enum,并在个人模型中使用。

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

使用HTML Helper

将此属性添加到创建或编辑视图中时
@Html.EnumDropDownListFor(model => model.Title)

控件按预期呈现其中的枚举值。

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

但是,如果我删除nullable,则会始终显示enum中的第一项。

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

非常感谢,

杰森。

2 个答案:

答案 0 :(得分:8)

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

你提到你有一个可以为空的枚举,但为此你需要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
}

使用此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);
}

并使用简单的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>

我得到了这个结果:

enter image description here

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

答案 1 :(得分:5)

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