如何在 MVC 中映射 2 个不同的列表 asp.net
本文关键字:列表 net asp MVC 映射 | 更新日期: 2023-09-27 18:32:08
我试图将列表从控制器发送到视图。我以为它会绑定,但它是另一种类型,所以它不会。(错误:参数类型"System.Collections.Generic.List"不能分配给模型类型"System.Collections.Generic.IEnumerable")。那么我应该如何映射这两个列表呢?
控制器
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>
你几乎拥有它:
public ActionResult MyData()
{
List<NewListViewModel> newList =
db.oldList.Select(x=>new NewListViewModel { Name = x.Name}).ToList();
return View(newList);
}
只需对NewListViewModel
类进行新List
,然后用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);
}
你可以按照 @arash.zh 的建议去做。或者你可以只使用
@model dynamic
而不是
@model IEnumerable<MyApp.ViewModels.NewListViewModel>