如何为枚举创建EditorTemplate?

时间:2013-12-07 19:23:56

标签: c# asp.net-mvc-4 razor mvc-editor-templates

我有一个enum

的模型
public enum Gender
{
    Male,
    Female,
    Unspecified
}

public class FooClass
{
    public Gender UserGender {set; get;}
}

由于这个Gender可能在其他类中使用,我想为它创建一个EditorTemplate并在创建/编辑视图中要求编辑器:

@Html.EditorFor(model => model.UserGender)

之后我创建了一个位于Views/Shared/EditorTemplates/Gender.cshtml的局部视图。在模板中,我添加了一些仅用于测试的内容,如:

@model TestProject.Models.Entity.Gender
@Html.TextBox("")

@model TestProject.Models.Entity.Gender
Hello...

但我得到的只是例外:

  

传递到字典中的模型项为null,但此字典需要“TestProject.Models.Entity.Gender”类型的非null模型项。

这是编辑器模板的工作原理还是完全偏离轨道?

修改

如果删除模板文件(Gender.cshtml),我将获得一个文本字段作为编辑器,并且不会抛出任何异常。

此外,这是一个Create视图,在控制器中我没有传递任何对象。我只是致电return View();

1 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情

@model Nullable<TestProject.Models.Entity.Gender>
@Html.ListBox("lb", Enum.GetValues(typeof(TestProject.Models.Entity.Gender)).Cast<TestProject.Models.Entity.Gender>().Select(i => new SelectListItem() { Text = i.ToString(), Value = i.ToString(), Selected=i==Model }))