2014-04-02 55 views
0

我在運行時正在構建的頁面上有多個下拉列表。我有一個選擇列表視圖模型。我已經嘗試this post這是偉大的,但它有點不同因爲我有一個視圖模型的視圖集合。我認爲我很接近,但我不確定如何正確使用DropDownListFor。我怎樣才能預先選擇不同值的每個下拉列表?如何預先選擇MVC下拉列表?

VM

public class categoryVm 
{   
    public IEnumerable<SelectListItem> category { get; set; } 

    public string SelectedValue { get; set; } 
} 

查看

@model IEnumerable<categoryVm> 
@foreach (var item in Model) 
{ 
    //i think i am missing something here??? 
    @Html.DropDownListFor(**x => item.SelectedValue**, item.category) 
} 

控制器

名字是StaticName之一,它就像一個ID,並在列表中。

var categories = new List<categoryVm>(); 
var selectlistcolumns = columns.Select(x => new SelectListItem 
      {      
       Value = x.StaticName, 
       Text = x.DisplayName 
      }); 

foreach (var column_loopVariable in dtCSV.Columns) 
      { 
       var category= new categoryVm();      
       category.category= selectlistcolumns; 
       category.SelectedValue = "name"; 
       categories .Add(category); 
      } 
    return View(categories); 

我寧願mvc解決方案比使用JavaScript更改dom。

+0

您可以按照預先填充TextBox值的方式預先選擇DDL值。合理? – CSharper

回答

1
@Html.DropDownListFor(m => item.SelectedValue, new SelectList(item.category)) 
+0

感謝您的回覆Murali。 m => item.category在intellisense中沒有SelectedValue .. m => item有SelectedValue但是不起作用。 – lawphotog

+0

@LaurenceNyein,這是我的錯誤。編輯答案。 –

+0

感謝您的幫助,但我沒有看到我的原始代碼有任何區別..你能解釋多一點嗎? – lawphotog

1

由於您的控制器返回列表。 您應該在視圖頁面中使用IList而不是IEnumerable。

@model IList<categoryVm> 

for (int i = 0; i < Model.Count; i++) 
{ 
    @Html.DropDownListFor(m => Model[i].SelectedValue, Model[i].category) 
} 

View Model IEnumerable<> property is coming back null (not binding) from post method?

+1

這種方法或其他選項都是爲「categoryvm」創建EditorTemplate,在這種情況下,您可以簡單地調用Html.EditorFor,MVC將自動將適當的索引應用於您的字段 – Moeri

2

,如果你發現了Html.DropDownListFor(propExpresstion, selectList) 所以你假設不設置選擇的值的第一個參數的簽名試試這個

var selectlistcolumns = columns.Select(x => new SelectListItem 
     {      
      Value = x.StaticName, 
      Text = x.DisplayName, 
      Selected = x.DisplayName == "name" // this sets the selected value 
     }); 

foreach (var column_loopVariable in dtCSV.Columns) 
     { 
      var category= new categoryVm();      
      category.category= selectlistcolumns; 
      //category.SelectedValue = "name"; // not required 
      categories .Add(category); 
     } 

也。希望這可以幫助!