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

C# 我可以在使用编辑器时创建下拉列表吗?,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,如何使用数据注释创建下拉列表 我想实现由生成的标记 @Html.DropDownListFor(x=>x.ContactType, Model.ContactTypeOptions) 设置以便我可以使用,并生成下拉列表: @Html.EditorForModel(Model) 我目前的模式是: public class ContactModel { public string ContactType { get; set; } public IL

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

我想实现由生成的标记

@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; }
    }
公共类联系人模型
{
公共字符串ContactType{get;set;}
公共IList联系人类型选项
{
得到
{
返回新列表()
{
新建SelectListItem(){Text=“Options”}
};
}
}
[必需(AllowEmptyStrings=false)]
[行政长官(15)]
[数据类型(DataType.multilitext)]
公共字符串消息{get;set;}
}
已更新
我不想使用局部视图。

您可以尝试以下方法:

public class ContactModel
{
    [UIHint("_DropDownList")]
    public SelectList ContactType { get; set; }
}
将(在控制器中)
ContactType.Items
设置为选项列表,并将
ContactType.SelectedValue
设置为最初选择的值

然后定义一个局部视图\u DropDownList.cshtml

@model SelectList

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

现在,当您执行
@Html.EditorFor(m=>m.Property)
时,您甚至可能会发现这种行为,其中
m.Property
是一个
SelectList
。我不确定

如果您希望只在您的
联系人模型上使用
EditorForModel()
,那么您可以创建一个名为
ContactModel.cshtml
的编辑器模板,并执行以下操作:

@model ContactModel

@Html.DropDownListFor(m => m.ContactType,
    new SelectList(Model.ContactTypeOptions, Model.ContactType))

请注意,在已键入到
ContactModel
的视图中,应将其称为
@Html.EditorForModel()
——作为重载
EditorForModel(对象)
中的参数传入的对象用于其他视图数据,而不是模型对象
EditorForModel
始终为当前视图模型呈现编辑器模板。

如果这不符合您的要求,您需要减少含糊不清的内容。很抱歉,阅读我的评论没有意义,我想说的是,我希望避免使用局部视图,并且仍然以相同的方式呈现下拉列表,您的方式是局部解决方案,这是我不喜欢的,因为我需要创建局部视图并仍然渲染它,我还需要修改现有代码以不渲染下拉列表并使用局部视图。这让我得出结论,它实际上比创建完整的局部视图需要更多的工作。谢谢你的努力