我可以在使用编辑器时创建下拉列表吗?

时间:2014-03-12 23:05:57

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

如何使用数据注释创建下拉列表?

我想实现

生成的标记
@Html.DropDownListFor(x=>x.ContactType, Model.ContactTypeOptions)

要设置,以便我可以使用,它会生成下拉列表:

@Html.EditorForModel(Model)

我目前的模特是:

public class ContactModel
    {
        public string ContactType { get; set; }
        public IList<SelectListItem> ContactTypeOptions
        {
            get
            {
                return new List<SelectListItem>()
        {
            new SelectListItem(){Text = "Options"}
        };
            }
        }
        [Required(AllowEmptyStrings = false)]
        [MinLength(15)]
        [DataType(DataType.MultilineText)]
        public string Message { get; set; }
    }

更新 我不想使用局部视图。

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

public class ContactModel
{
    [UIHint("_DropDownList")]
    public SelectList ContactType { get; set; }
}

设置(在您的控制器中)ContactType.Items作为您的选项列表,并ContactType.SelectedValue作为您最初选择的值。

然后定义局部视图 _DropDownList.cshtml

@model SelectList

@Html.DropDownListFor(m => m.SelectedValue, Model)

然后,您应该可以使用@Html.EditorFor(m => m.ContactType)并获取下拉列表。你可以在任何地方重复使用它!

@Html.EditorFor(m => m.Property) m.PropertySelectList EditorForModel()时,您甚至可能会立即获得此行为。不确定那个。

如果您希望在ContactModel上使用ContactModel.cshtml,那么您只需创建名为@model ContactModel @Html.DropDownListFor(m => m.ContactType, new SelectList(Model.ContactTypeOptions, Model.ContactType)) 的编辑器模板即可:

@Html.EditorForModel()

请注意,在已经键入ContactModel的视图中,这应该被称为EditorForModel(Object) - 作为重载EditorForModel中的参数传入的对象用于其他视图数据,< em> not 表示模型对象。 {{1}}始终为当前视图模型呈现编辑器模板。