2015-10-26 19 views
3

我有一個佈局和三個部分視圖,我將整個模型傳遞給部分視圖。我想知道剃刀是通過了模型的參考還是其副本?是使用Html.Partial()引用部分視圖的模型嗎?

佈局

@model MyCustomModel 

<div>@Html.Partial("View1", Model)</div> 
<div>@Html.Partial("View2", Model)</div> 
<div>@Html.Partial("View3", Model)</div> 

最好的體驗是建立在佈局模型的局部視圖具體型號和傳遞的具體型號,但佈局模型非常複雜,我不能觸摸它也是因爲A/B測試的。

+0

您的佈局模型(View Model)不應該很複雜,它應該是乾淨的並且只包含特定視圖的必需屬性。 – Luke

回答

3

中的代碼只是普通C#,因此,如果Modelobject,而不是一個struct或基本類型(如intbool),它是「通過引用」,而不是被複制。

在我看來沒有太大的擔心,因爲一個視圖會永遠不會改變模型,所以無論是否複製,都沒關係。

0

@Html.Partial最後只是一個C#方法,如果你的模型真的讓你使用class複雜,並且C#通過object作爲默認參考。

可能的解決方案之一,但不是很乾淨是爲每個PartialView創建另一個模型,並在您的主視圖上填充模型。

@{ 
    var PartialViewModel1 = Model.PropertiyThatYouNeed; 
    //Init other properties if you need 
} 

@Html.Partial("View1", PartialViewModel1); 

所以你不需要觸摸你的主ViewModel。