MVC3 Элемент модели, переданный в словарь, имеет тип «_320.Models.MyViewModel», но - PullRequest
0 голосов
/ 06 декабря 2011

Я передаю модель представления в представление, содержащее цикл foreach.Эта модель представления содержит два списка.Эти списки заполняются с использованием Linq.

. С помощью следующего кода я получаю следующую ошибку: Переданный в словарь элемент модели имеет тип _320.Models.MyViewModel, но для этого словаря требуется элемент модели:введите 'System.Collections.Generic.IEnumerable`1 [_320.Models.MyViewModel]'.

Я хочу получить свойства, содержащиеся в двух списках в ViewModel в цикле foreach моего представления.

ОБНОВЛЕНИЕ Я смог отобразить представление, изменив конец кода моего контроллера на:

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

Однако это пустое представление без чего-либоно заголовки.Когда я пытаюсь изменить свои поля в моем представлении с что-то вроде @Html.DisplayFor(modelItem => item.rx.Rx_ID) на @Html.DisplayFor (modelItem => 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>

1 Ответ

1 голос
/ 06 декабря 2011

Ваше представление ожидает модель типа IEnumerable <_320.Models.MyViewModel> из-за первой строки в представлении.

@model IEnumerable<_320.Models.MyViewModel>

Если вы хотите использовать объект модели типа MyViewModel (как указано в вашем контроллере), измените эту строку на

@model _320.Models.MyViewModel
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...