MVC 5中的Enum到Dropdown

问题描述 投票:9回答:2

我有一个 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助手将此属性添加到创建或编辑视图中时,会发现

@Html.EnumDropDownListFor(model => model.Title)

控件会按照预期的方式显示其中的枚举值。

然而,当我选择编辑一个现有的人物时,标题的 enum 不显示当前标题。它显示的是在 DropDownList.

然而,如果我删除 nullable的第一个项目,它总是显示在 enum.

任何想法,我怎么得到的 DropDownList 以显示正确选择的 enum 我正在编辑的人的项目?

非常感谢。

Jason.我有一个为人称定义的可空值枚举,并在人称模型中使用,公共枚举Titles { Mr=0, Mrs=1, Miss=2, Dr=3 }。

c# asp.net-mvc asp.net-mvc-5 html-helper
2个回答
5
投票

试着给你的Title属性起个别的名字,Title似乎是某种保留的关键字。


8
投票

我只是做了一个简单的测试。

你提到你有一个 nullable 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
}

用这个 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

这正是我所期望的... 你是不是从我的例子中遗漏了什么?

© www.soinside.com 2019 - 2024. All rights reserved.