2013-04-16 38 views
0

我有一個無序列表,其中包含多個列表項,其中每個列表項都有一個複選框和一個下拉列表。ASP.Net MVC - 如何使用選定的值獲取控制器中的下拉列表集合

我想要獲取與選中的複選框相對應的每個下拉列表的所選下拉值。

我可以很容易地通過控制器參數int []複選框檢查複選框。這給出了每個選中的複選框的值。

現在,我怎樣才能得到選中的複選框旁邊的下拉列表中的值。

我必須使用JavaScript來捕獲選定的值並將其傳遞給控制器​​嗎?

回答

1

你需要在控制器與更復雜的模型的工作不僅僅是int[]

public class CheckedListModel 
{ 
    public bool IsChecked { get; set; } 

    public int SelectedValue { get; set; } 

    public SelectList Items { get; set; } 
} 

樣本,以便使這種模型的列表:

@model CheckedListModel[] 

@using (Html.BeginForm()) 
{ 
    <ul> 
     @for (int i = 0; i < Model.Length; i++) 
     { 
      <li> 
       @Html.CheckBoxFor(m => m[i].IsChecked) 
       @Html.DropDownListFor(m => m[i].SelectedValue, Model[i].Items) 
      </li> 
     } 
    </ul> 
    <input type="submit" value="Save"/> 
} 

而且控制器:

[HttpGet] 
    public ActionResult Index() 
    { 
     return View(new CheckedListModel[] 
      { 
       //Sample data 
       new CheckedListModel{Items = new SelectList(new [] 
        { 
         new SelectListItem{Text = "Text 1", Value="1"}, 
         new SelectListItem{Text = "Text 2", Value="2"}, 
         new SelectListItem{Text = "Text 3", Value="3"}, 
        }, "Value", "Text")}, 
       new CheckedListModel{Items = new SelectList(new [] 
        { 
         new SelectListItem{Text = "Text 5", Value="5"}, 
         new SelectListItem{Text = "Text 6", Value="6"}, 
        }, "Value", "Text")}, 
      }); 
    } 

    [HttpPost] 
    public ActionResult Index(CheckedListModel[] models) 
    { 
     IEnumerable<CheckedListModel> checkedItems = models.Where(m => m.IsChecked); 
     //Rest of the code 
    } 
相關問題