【问题标题】:DropDownListFor from Enum with default value using ViewModel来自 Enum 的 DropDownListFor 使用 ViewModel 的默认值
【发布时间】:2011-12-22 02:10:59
【问题描述】:

如何配置我的 ViewModel 和 View 以支持包含以下枚举的下拉列表:

public enum PersonType
{
   Bride,
   Groom
}

我希望下拉列表的文本显示“新娘”、“新郎”,并且值分别为 0 和 1。我也想为视图配置一个默认值(新娘或新郎)。这样做的目的是创建一个“创建”表单,我将发布该表单并稍后确定选择了哪个选项(我猜我需要在 ViewModel 中使用一个 int 来跟踪用户选择的内容)。这将如何连接?我正在使用 Razor。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 razor viewmodel


    【解决方案1】:
    public enum PersonType
    {
       Bride=0,
       Groom=1
    }
    

    在您的模型中,您将拥有类似

    的属性
    public class mymodel{
    
    [Required(ErrorMessage="this field is required")]
    public int ID{get;set;}
    public IEnumerable<KeyValuePair<string, string>> _list{get;set}
    }
    

    在你的控制器中

    mymodel model = new mymodel();
    
    model._list=Enum.GetNames(typeof(PersonType))
                 .Select(x => new KeyValuePair<string, string>(x, x.ToString()));
    return View(model);
    

    在你看来

    @Html.DropDownListFor(x=>x.ID,new SelectList(model._list,"key","value"))
    @ValidationMessageFor(x=>x.ID)
    

    【讨论】:

    • 他需要值是int,除此之外,这是要走的路。
    • 谢谢!我如何将其默认为视图中的“新郎”?我可以发送“选定值”吗?
    • 只需反转枚举中的值
    • 问题是有时我想默认为 Groom 而其他时候我想默认为 Bride 所以反转 Enum 将不起作用。
    【解决方案2】:

    我为枚举创建了一个 HtmlHelper - 并设置了一个默认字符串模板以在模型类型为枚举时使用该帮助器。

    这意味着我可以直接转到@Html.EnumDropDownListFor( x =&gt; x.PersonType ),它会呈现一个带有枚举选项的下拉列表。

    我从 this 博客复制了帮助程序,并将以下内容添加到 \Shared\EditorTemplates\String.cshtml 中的字符串模板中

    @model object
    @if (Model is Enum)
    {
        @Html.EnumDropDownListFor(x => x)
    }
    else
    {
        @Html.TextBoxFor(x => x)
    }
    

    这意味着我将获得任何枚举的下拉列表,而不必担心更改视图模型。

    助手不会将选择框的值设置为基础数字,但它仍然可以很好地绑定到操作参数。您应该能够相当容易地编辑助手,因为将基础数字作为下拉列表的一部分很容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多