2016-01-26 61 views
2

我試圖從控制器發送一個列表到視圖。我認爲它會綁定,但它是一種不同的類型,所以它不會。 (錯誤:參數類型'System.Collections.Generic.List'不能分配給模型類型'System.Collections.Generic.IEnumerable')。那麼我該如何映射這兩個列表呢?如何在asp.net MVC中映射2個不同列表

控制器

public ActionResult MyData() 
    { 
     var oldList = db.oldList.Select(x=>x.Name).ToList(); 

// probably here i should add var newList and in some way map with oldList then return to view 

     return View(oldList); 
    } 

新的列表視圖模型

public class NewListViewModel 
    { 
     public string Name { get; set; } 
     public int Count { get; set; } 
    } 

我的視圖(邁德特)

@model IEnumerable<MyApp.ViewModels.NewListViewModel> 

<table class="table"> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.Name) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Count) 
     </th> 
    </tr> 

    @foreach (var item in Model) 
    { 
     using (Html.BeginForm()) 
     { 
      <tr> 
       <td> 
        @Html.TextBoxFor(modelItem => item.Name) 
       </td> 
       <td> 
        @Html.TextBoxFor(modelItem => item.Count) 
       </td> 
      </tr> 
     } 
    } 
</table> 
+0

您選擇'Name',那麼你的''oldList是'IEnumerable的'但你的視圖等待'IEnumerable ' –

+0

我知道它,但我想從舊列表中獲取每個名稱並將它們添加到newList。 – DiPix

回答

1

你幾乎擁有了:

public ActionResult MyData() 
     { 
      List<NewListViewModel> newList = 
       db.oldList.Select(x=>new NewListViewModel { Name = x.Name}).ToList(); 

      return View(newList); 
     } 
+0

非常感謝。我知道我該怎麼做,但我不知道如何:P – DiPix

+0

btw。我以後如何在控制器中接收數據?公開ActionResult FirstStock(FirstStockViewModel數據) {}? – DiPix

+0

在剃刀文件的頂部聲明模型(通過MVC約定:MyData.cshtml)@model Fully.Qualified.Namespace.NewListViewModel 並且您將能夠訪問模型的HTML屬性,如

@ Model.Name

Shayno

1

剛剛作出新的類NewListViewModelList然後用oldList填充數據

public ActionResult MyData() 
{ 
    var oldList = db.oldList.Select(x=>x.Name).ToList(); 
    var newList=new list<NewListViewModel>(); 
     foreach(var item in oldList) 
     { 
     newList.Add(new NewListViewModel{Name=item.Name}); 
     } 
    return View(newList); 
} 
0

您可以執行@ arash.zh所建議的操作。或者你也可以使用

@model dynamic 

代替

@model IEnumerable<MyApp.ViewModels.NewListViewModel>