2015-03-02 84 views
1

我嘗試將一個列表傳入我的視圖,但我得到以下錯誤:CS1963:表達式樹可能不包含動態操作在我的視圖,在行@ html.displayfor ... 。razor @foreach問題與列表

public class ColNameLink 
{ 
    public string ColName { get; set; } 
    public List<string> AvaiableDBcolumns { get; set; } 
} 


public class ViewModelListColumns 
{ 
    public List<ColNameLink> ColList { get; set; } 
} 

控制器

 var columnNames = (from dc in dt.Columns.Cast<DataColumn>() 
           select dc.ColumnName).ToList(); 

     var AvailLinks = new List<string>(); 
     AvailLinks.Add("FirstName"); 
     AvailLinks.Add("SurName"); 

     var viewModel = new ViewModelListColumns() { ColList = new List<ColNameLink>() }; 
     columnNames.ForEach(colName => viewModel.ColList.Add(new ColNameLink { ColName = colName, AvaiableDBcolumns = AvailLinks })); 

     return View("ChooseColumns", viewModel); 

查看

@Model uploabulk.ViewModels.ViewModelListColumns 

<table class="table"> 
    <tr> 
     <th>Column name</th> 
     <th>Database column</th> 
     <th>Include?</th> 
    </tr> 
    @foreach (var colList in Model) 
    { 
     foreach (var column in colList) 
     { 
      <tr> 
       <td>@Html.LabelFor(m => column.ColName) </td> 
       <td>Html.DropDownListFor("Selection", new SelectList(column.AvaiableDBcolumns, "AvailableDBcolumns"))</td>--> 
       <td></td> 
      </tr> 
     }   
    } 
</table> 
+0

你想DropDownListFor確定而不是DropDownList? Razor中所有'... For'方法的第一個參數是一個表達式(例如'm => m.AvailableDBcolumns')。 – 2015-03-02 21:28:43

回答

2

有一些問題與您的代碼。首先你的視圖模型是uploabulk.ViewModels.ViewModelListColumns,這就是你傳遞給它的地方:return View("ChooseColumns", viewModel);

但是,在您的視圖中,您正試圖在您的Model上編寫一些@foreach循環,這是不可能的,因爲您只能遍歷IEnumerable類型。

因此,請確保您的視圖代碼是你的看法模型一致:

@model uploabulk.ViewModels.ViewModelListColumns 

<table class="table"> 
    <tr> 
     <th>Column name</th> 
     <th>Database column</th> 
     <th>Include?</th> 
    </tr> 
    @for (var i = 0; i < Model.ColList.Count; i++) 
    { 
     <tr> 
      <td>@Html.LabelFor(m => m.ColList[i].ColName)</td> 
      <td> 
       @Html.DropDownListFor(
        x => x.ColList[i].ColName, 
        new SelectList(Model.ColList[i].AvaiableDBcolumns) 
       ) 
      </td> 
      <td></td> 
     </tr> 
    } 
</table> 
+0

感謝您的詳細回覆。很有幫助。現在我收到另一個錯誤:「行表達式樹可能不包含動態操作」在行「​​@ Html.LabelFor(m => colList.ColName)」 – 2015-03-03 21:08:07

1

你需要參考,以迭代它ColList屬性:

@foreach (var colList in Model.ColList)