2012-07-06 60 views
1

我有一個用於提取工作角色值的文本框。然而,這受限於數據庫方面的某些角色。因此,使用僅包含有效角色的下拉列表對我來說更有意義。我試圖設置它,但遇到困難。在MVC3中創建一個簡單的下拉列表

我把下面的代碼在我看來:

<p> 
    @Html.LabelFor(m => m.Role) 
    @Html.DropDownListFor(m=>m.Roles) 
    @Html.ValidationMessageFor(m => m.Role) 
</p> 

,這在我的模型:

public List<string> Roles 
    { 
     get 
     { 
      return new {"Author","Underwriter" }; 
     } 
    } 

這雖然不會編譯。任何想法我做錯了什麼?

+0

我希望有在.NET框架來創建'的IEnumerable '的能力通過簡單地調用'的IEnumerable 結果= {MYT,MYT2};',而不必編寫'的IEnumerable 結果=新型T [] {m​​yT,myT2}'。如果對象的類型相同,甚至可以推斷出這個類型('var' friendly)。 – 2012-07-06 11:38:36

回答

6

爲了創建一個下拉列表,您需要在視圖模型上使用2個屬性:一個標量屬性,它將保存選定的值和一個集合屬性,其中包含要顯示的可用項目列表。

,以便始終通過編寫一個視圖模型開始:

public class MyViewModel 
{ 
    [Required] 
    [DisplayName("Role")] 
    public string SelectedRole { get; set; } 

    public IEnumerable<SelectListItem> Roles 
    { 
     get 
     { 
      return new[] 
      { 
       new SelectListItem { Value = "Author", Text = "Author" }, 
       new SelectListItem { Value = "Underwriter", Text = "Underwriter" } 
      }; 
     } 
    } 
} 

然後控制器動作,將這個模型傳遞給視圖:

public class HomeController: Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel(); 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 
     return Content("Thanks for selecting role: " + model.SelectedRole); 
    } 
} 

最後一個對應的強類型的觀點:

​​
+0

真棒 - 謝謝Darin – Sperick 2012-07-06 11:49:06

0

List<string>添加到創建語句

public List<string> Roles 
    { 
     get 
     { 
      return new List<string> {"Author","Underwriter" }; 
     } 
    }