2014-03-12 51 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

相關問題