У меня есть ViewModel под названием LogViewModel, у меня есть 3 свойства, как показано ниже.

public class LogViewModel
{
    public IEnumerable<Log> Logs { get; private set; }
    public PaginationHelper Pagination { get; set; }
    public LogFilter Filter { get; set; }
}

LogViewModel передается в Просмотр как модель. Теперь мне нужно передать LogFilter (с данными) для частичного просмотра, например:

@Html.Partial("_LogsFilter", Model.Filter)

Я пробовал много способов, но всегда получаю одну и ту же ошибку:

Элемент модели, переданный в словарь, имеет тип Infrastructure.Presentation.Desk.ViewModels.LogViewModel, но для этого словаря требуется элемент модели типа Infrastructure.Presentation.Desk.Models.LogFilter.

Любые мысли?

4
Jacek Jaskólski 25 Июл 2014 в 11:08
1
Ваше свойство Filter, вероятно, имеет значение null. Попробуйте что-то вроде @Html.Partial("_LogsFilter", Model.Filter ?? new LogFilter()), конечно, если LogFilter имеет конструктор по умолчанию.
 – 
Zabavsky
25 Июл 2014 в 11:11
1
Объявление ModelType вашего представления @model LogFilter вместо @model LogViewModel?
 – 
Rowan Freeman
25 Июл 2014 в 11:15
Спасибо, что сработало. Я создавал новый экземпляр LogFilter в конструкторе LogViewModel и после этого случайно установил его значение равным нулю.
 – 
Jacek Jaskólski
25 Июл 2014 в 11:25

2 ответа

Лучший ответ

Поскольку свойство Filter имеет значение null, структура передаст модель из родительского представления в частичное, то есть LogViewModel, в то время как частичное представление ожидает тип LogFilter.

Чтобы предотвратить это, убедитесь, что свойство Filter создается до рендеринга представления, или сделайте что-нибудь вроде этого:

@Html.Partial("_LogsFilter", Model.Filter ?? new LogFilter())
8
Zabavsky 25 Июл 2014 в 11:47

В этом случае ваше частичное представление должно ожидать " LogFilter " в качестве модели. Но я думаю, что вы передаете LogFilter , а частичное представление ожидает " LogViewModel ". Исправьте несоответствие.

0
Razack 25 Июл 2014 в 13:18
В моем _LogFilter.cshtml модель частичного представления определяется как LogFilter, хотя это также может вызвать эту ошибку.
 – 
Jacek Jaskólski
25 Июл 2014 в 15:14