如何将ViewModel属性作为模型传递给局部视图?

4

我有一个名为LogViewModel的ViewModel,其中包含以下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'。

您有什么想法吗?


1
你的 Filter 属性可能为空。尝试使用类似于 @Html.Partial("_LogsFilter", Model.Filter ?? new LogFilter()) 的代码,当然前提是 LogFilter 有一个默认构造函数。 - Zabavsky
1
你的视图中的 ModelType 声明是否为 @model LogFilter 而不是 @model LogViewModel - Rowan Freeman
@Zabavsky 谢谢,那个方法有效。我在 LogViewModel 构造函数中创建了一个新的 LogFilter 实例,然后不小心将其值设置为 null。 - Jacek Jaskólski
2个回答

8

由于 Filter 属性为空,框架将从父视图传递模型到局部视图,该模型是 LogViewModel,而局部视图期望的类型是 LogFilter

为了防止这种情况发生,请确保在渲染视图之前实例化 Filter 属性,或者执行以下操作:

@Html.Partial("_LogsFilter", Model.Filter ?? new LogFilter())

0
在这种情况下,您的部分视图应该期望“LogFilter”作为模型。但我认为您正在传递LogFilter,而部分视图期望“LogViewModel”。请纠正不匹配之处。

在我的 _LogFilter.cshtml 局部视图中,模型被定义为 LogFilter,尽管这也可能导致此错误。 - Jacek Jaskólski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接