2014-03-12 52 views
0

如何使用数据注释创建下拉列表?使用编辑器可以创建下拉列表吗?

我想实现由

@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; } 
    } 

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

回答

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始终呈现当前视图模型的编辑器模板。

+0

这是很好,但ID不能让我使用编辑器。 – cpoDesign

+0

如果这不符合你的要求,你需要不太模糊。 –

+0

对不起,阅读我的评论没有意义,我的意思是说我想避免使用部分视图,仍然有下拉列表渲染相同的方式,你的方式是部分解决方案,我不喜欢,因为我需要创建部分视图和仍然呈现它,我也需要修改现有的代码不呈现下拉列表并使用局部视图。这使我得出结论,它涉及实际上比创建完整的局部视图更多的工作。无论如何Thnx – cpoDesign

相关问题