2012-05-25 59 views
0

處理我的第一個MVC3應用程序。我有一個簡單的視圖,有2個對象(對象A,對象B)。對象B是可選的。我用這兩個對象創建了一個模型,並讓Controller正常工作,將數據來回傳遞給View。MVC3中的簡單DropDownList

我想放入一個簡單的DropDownList爲用戶決定是否要輸入對象B的數據。下拉列表很簡單 - 兩個值「是」和「否」。
例如:繼續使用「B」部分?
[是]
[否]

在視圖中,用戶填寫的所有對象A的形式項目。然後,他們有一個選擇填寫我希望他們能夠物體B的項目如果他們想這樣做,選擇「是」(我使用Jquery在當時顯示更多頁面)。

我的問題:我如何製作一個簡單的Dropdownlist(或甚至是基本的HTML輸入類型=「select」...),我可以在Controller提交表單後訪問它?

在我的控制,我要做到以下幾點:
*做的東西爲對象的
*檢查,看看他們是否選擇是
*做的東西爲對象B

是否簡單的東西作爲是/否下拉需要進入模型?它沒有輸入任何內容 - 只是用戶在View中做出的決定。我知道必須有一個簡單的方法來執行此操作(ViewBag?),但我是新的,顯然已經丟失。

TL; DR - 如何在View中創建一個簡單的DropdownList,我可以在Controller中訪問?

+0

好了 - 我可以使用的Request.Form [ 「ddlChoice」];在控制器中,這將工作。這是做這件事的最好方法嗎? –

+0

請參閱下面的答案,我覺得如果使用Request.Form屬性代替使用強類型類,則會出現更多代碼膨脹並且更容易出錯。如果你覺得下面的答案有幫助,請標記爲答案,有一個好的答案! – likestoski

回答

2

在HTTPPOST中爲對象從視圖中獲取值的經驗法則是將輸入控件的id和name屬性命名爲Models屬性名稱。一個簡單的方法是使用Html助手。

public class Model 
    { 
     public Model() 
     { 
      List<SelectListItem> options = new List<SelectListItem>(); 
      options.Add(new SelectListItem { Value = true.ToString(), Text = "yes" }); 
      options.Add(new SelectListItem { Value = false.ToString(), Text = "no" }); 
      ContinueOptions = options; 
     } 
     public bool Continue { get; set; } 
     public IEnumerable<SelectListItem> ContinueOptions { get; set; } 
    } 

在你看來:

@Html.DropDownListFor(m => Model.Continue, Model.ContinueOptions) 

在你的控制器:

[HttpPost] 
public ActionResult Edit(Model model) 
{ 
    bool continueOn = model.Continue; 

} 
0

是你的下拉應該是模型的一部分,否則控制器將不會有來自用戶的答案檢查,看他們是否選擇是

public SomeViewModel 
{ 
    public ObjectA A { get; set; } 
    public ObjectB B { get; set; } 
    public bool? IsBSelected { get; set; } 
} 

我通常使用bool?只是因爲我想知道,如果用戶選擇或其他,但使用bool將被罰款了。