2013-06-24 66 views
9

在ASP.NET MVC和Razor中,我有一個View(parent)調用另一個View(child)爲partial。兩者都是強類型的,但它們具有不同的模型類型。如何防止視圖將其模型傳遞給局部視圖,而是傳遞null?

通常,在這些情況下,我們將顯式地從父視圖傳遞給子視圖。

@Html.Partial("Child", Model) 

我們也可以選擇不明確指定一個模型來傳遞,在這種情況下,父視圖會嘗試自己的模式傳遞給孩子查看。如果這些類型匹配並且在大多數情況下是可取的,這將起作用。

@Html.Partial("Child") 

在我的情況,但是,我真想父視圖嘗試任何東西傳遞給孩子查看。我會怎麼做?

我想試圖通過null明確的:

@Html.Partial("Child", null) 

但這還通過家長的模型子視圖,從而導致錯誤:The model item passed into the dictionary is of type 'A', but this dictionary requires a model item of type 'B'.

(作爲一個側面說明,子視圖是它的模型的創建視圖,這就是爲什麼我沒有實例傳遞給它。)

回答

11

試試這個:

@Html.Partial("Child", null, new ViewDataDictionary<ChildType>(childInstance/*this can be null*/)) 
5

我明白你不想傳遞模型的原因是爲了讓你的輸入被清空? 如果是這樣的話,你可以通過比較新的型號,以該部分:

@Html.Partial("Child", new Model()) 

由於模型是新的,它不會有任何填充值。

+1

排序。更確切地說,原因是因爲當調用視圖時,從概念上講沒有該Model *的實例*。我覺得創建並傳遞一個尚不存在的模型實例並不一定只是爲了滿足視圖引擎而感到不舒服。 –

1

你可以讓你的創建表單不是強類型的......製作你的輸入爲了一旦發佈,你將有一個綁定在你的控制器動作中的模型。

現在...對於我來說,僅僅爲「尚未存在的模型」(AKA尚未存在於數據庫中)的概念微妙而言,這項工作並不值得。

在我來說,我創建的虛擬模型只是設置在某些領域的默認值(例如:設定日期的今天,在dropdownlists默認值等)