如何在 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>

如何在 MVC 中映射 2 个不同的列表 asp.net

你几乎拥有它:

    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>