我是否必须为一个属性设置2个字段才能填写下拉列表?

时间:2014-06-10 07:15:52

标签: asp.net-mvc html.dropdownlistfor

我的视图强烈输入以下模型:

 public class CitizenDocument{
    public string Name{get;set;}
    public SocialStatus SocialStat{get;set;}
    public AppType ApplicationType{get;set;}
    public int Age{get;set;}
    public ReplyMethod PreferredReplyMethod{get;set;}
    .......//omitted for brevity
 }

以下是我上面使用的三种自定义类型

  public Enum SocialStatus{
    Servant=1,Worker,Peasent,Student,Unemployed,Pensioner
  }

  public Enum AppType{
    Appliation=1,Complaint,Proposal,Query
  }

  public Enum ReplyMethod{
    Letter=1,Verbal
  }

当然,我需要下拉列表才能在视图中显示它们。 DropDownListFor<>方法需要至少两件事 - 一件用于存储所选的选项值,另一件是用于填充下拉列表的SelectList。我不想通过ViewBag传递SelectList,这意味着剩下的唯一方法是将其传递到模型中。但是这样我就必须为所有上述三个属性都有一个单独的SelectList。我对吗?或者还有其他我不知道的方式吗?我已经阅读了大量关于此事的SO帖子,但几乎每个人都建议采用模型方式,好像总会有一个模型属性。

1 个答案:

答案 0 :(得分:1)

@{
        var dictionary =  Enum.GetValues(typeof(SocialStatus)).Cast<SocialStatus>().ToDictionary(item => (int)item, item => item.ToLocalizedString());
        var selectList = new SelectList(dictionary, "Key", "Value", Model.SubscriptionTypeId);
    }
@Html.DropDownListFor(m => m.SocialStatusId, selectList)

所以只需在模型中存储所选枚举的id。 P.S。:ToLocalizedString()是我们获取枚举项名称的自定义方法