【问题标题】:MVC3 The model item passed into the dictionary is of type '_320.Models.MyViewModel', butMVC3 传入字典的模型项的类型是“_320.Models.MyViewModel”,但是
【发布时间】:2011-12-06 01:15:16
【问题描述】:

我将视图模型传递到包含 foreach 循环的视图中。此视图模型包含两个列表。这些列表是使用 Linq 填充的。

使用以下代码,我收到以下错误:传递到字典中的模型项的类型为“_320.Models.MyViewModel”,但此字典需要类型为“System.Collections.Generic.IEnumerable”的模型项1[_320.Models.MyViewModel]'。

我想在视图的 foreach 循环中访问 ViewModel 的两个列表中包含的属性。

更新 我已经能够通过将控制器代码的末尾修改为:

List<MyViewModel> MyList = new List<MyViewModel>();
           MyList.Add(_myViewModel);
                return View(MyList);

但是,它是一个只有标题的空视图。当我尝试将视图中的字段从 @Html.DisplayFor(modelItem =&gt; item.rx.Rx_ID) 更改为 @Html.DisplayFor (modelItem =&gt; item.Rxes.rx.Rx_ID) 时,它被标记为红色。是否无法访问位于列表中靠后的属性?

更新结束

型号

public class MyViewModel
    {

        public Patient patient { get; set; }
        public Rx rx { get; set; }
        public Fill fill { get; set; }
        public List<Rx> Rxes { get; set; }
        public List<Fill> Fills { get; set; }

控制器

public ActionResult AllFilled()
        {
            MyViewModel _myViewModel = new MyViewModel();
            List<Fill> FillList = db.Fills.Where(p => p.Status == "Filled").ToList();
            List<Rx> RxList = new List<Rx>();
            Rx myRx = new Rx();
            foreach (var item in FillList)
            {
                myRx = db.Rxes.Single(p => p.Rx_ID == item.Rx_ID);
                RxList.Add(myRx);
            }
            _myViewModel.Fills = FillList;
            _myViewModel.Rxes = RxList;

                return View(_myViewModel);
            }
        }

查看

@model IEnumerable<_320.Models.MyViewModel>

@{
    ViewBag.Title = "AllFilled";
}

<h2>AllFilled</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            NDC
        </th>
        <th>
            Rx_ID
        </th>
        <th>
            Fill_ID
        </th>
        <th>
            Status
        </th>
        <th>
            Filled Date
        </th>
        <th>
            Filled By
        </th>
        <th></th>
    </tr>
    {
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.rx.NDC)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.rx.Rx_ID)
        </td>
        <td>
            @Html.DisplayFor(modelItem =>item.fill.Fill_ID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.fill.Status)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.fill.Filled_Date)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.fill.Filled_By)
        </td>
        <td>
            @Html.ActionLink("Details", "Details", new { id=item.rx.Rx_ID })
        </td>
    </tr>
}
</table>

【问题讨论】:

    标签: asp.net-mvc-3 list foreach viewmodel


    【解决方案1】:

    由于视图中的第一行,您的视图需要 IEnumerable<_320.models.myviewmodel> 类型的模型。

    @model IEnumerable<_320.Models.MyViewModel>
    

    如果你想使用 MyViewModel 类型的模型对象(在你的控制器中编码),将此行更改为

    @model _320.Models.MyViewModel
    

    【讨论】:

    • 当我这样做时,我得到一个关于我的模型不包含 GetEnumerator 类型的错误
    • @foreach (var item in Model) 行说,您的模型只不过是一个 MyViewModel 对象列表,每个对象都包含一个填充和 rx 对象,因为您在循环中使用它们。但是您在一个 MyViewModel 对象中填充控制器中的两个单独的填充和 rx 对象列表。相反,您需要创建一个 MyViewModel 列表,并且每个列表都应该有一个填充和 rx 对象。
    猜你喜欢
    • 1970-01-01
    • 2020-09-08
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2015-09-19
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多