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

时间:2014-07-25 07:08:21

标签: c# asp.net asp.net-mvc razor

我有一个名为LogViewModel的ViewModel,我有3个属性,如下所示。

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

将LogViewModel传递给View as Model。 现在我需要将LogFilter(带数据)传递给部分视图,如:

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

我尝试了很多方法,但总是得到同样的错误:

  

传递到字典中的模型项是类型的   &#39; Infrastructure.Presentation.Desk.ViewModels.LogViewModel&#39 ;,   但是这个字典需要一个类型的模型项   &#39; Infrastructure.Presentation.Desk.Models.LogFilter&#39;

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

因为Filter属性为null,所以框架会将模型从父视图传递给partial LogViewModel,而部分视图需要LogFilter的类型。

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

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

答案 1 :(得分:0)

在这种情况下,您的部分视图应该将“ LogFilter ”作为模型。但我认为你传递 LogFilter ,部分视图需要“ LogViewModel ”。请纠正不匹配。