2014-07-25 65 views
4

我有ViewModel稱爲LogViewModel至至此我有3屬性如下所示。如何將ViewModel屬性作爲模型傳遞給部分視圖?

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) 

我嘗試了很多方法,但總是得到同樣的錯誤:

The model item passed into the dictionary is of type 'Infrastructure.Presentation.Desk.ViewModels.LogViewModel', but this dictionary requires a model item of type 'Infrastructure.Presentation.Desk.Models.LogFilter'.

有什麼想法?

+1

你的'Filter'屬性可能爲null。嘗試像'@ Html.Partial(「_ LogsFilter」,Model.Filter?new LogFilter())'',當然如果'LogFilter'有一個默認的構造函數。 – Zabavsky

+1

是你的視圖的'ModelType'聲明'@model LogFilter'而不是'@model LogViewModel'嗎? –

+0

@Zabavsky謝謝你的工作。我在LogViewModel構造函數中創建了一個LogFilter的新實例,然後意外地將它的值設置爲null。 –

回答

7

因爲Filter屬性爲null,所以框架會將模型從父視圖傳遞給部分,即LogViewModel,而部分視圖預計類型爲LogFilter

爲了防止這種保證Filter屬性渲染視圖之前實例化,或做這樣的事情:

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

非常有幫助,謝謝! – Marc

0

在這種情況下,你的部分觀點應該期待「LogFilter」爲模型。但我認爲你正在通過LogFilter,部分視圖期望「LogViewModel」。請糾正不匹配。

+0

在我的_LogFilter.cshtml局部視圖模型被定義爲LogFilter儘管這也可能會出現此錯誤。 –

相關問題