2012-11-18 145 views
9

我有一個控制器,它返回PartialViewResult並查看它的操作。爲了測試我輸出當前日期時間(在行動),並在視圖中,我檢查它是否爲空,所以我知道我得到了什麼。Html.Partial和Html.Action方法有什麼區別?

當我嘗試在另一個「嵌入」該視圖與Html.Action我得到當前的日期時間,所以我的行動被調用。

但是,當我使用Html.Partial視圖呈現爲空,我的行動方法不會被調用。此外,兩個斷點和調試器也證實,在後一種情況下,我的操作方法未被調用。

動作方法:

public PartialViewResult Test() 
{ 
    return PartialView(DateTime.Now); 
} 

(部分)查看:

@model DateTime? 

<p>@(Model ?? DateTime.MinValue)</p> 

和從主視圖中調用或者是@Html.Action("Test")@Html.Partial("Test")

+0

您能向我們展示「主視圖」 – gdoron

回答

23

Html.Action()將調用您的操作方法,但Html.Partial()不會。 Html.Partial()只是呈現你的局部視圖,如果你有一些靜態內容,或者你已經加載了視圖數據,那麼它很有用。

Html.Partial("PartialName", Model.PartialData); 

將渲染PartialName視圖並將模型數據傳遞給它。這是將視圖分解爲乾淨部分的好方法,無需向服務器發出任何其他請求。

Html.Action("Test") 

將調用您的測試操作並呈現結果。

這就是爲什麼你看到NULL DateTime。 Html.Action()實際上是調用動作,計算DateTime並渲染視圖,而Html.Partial()只是渲染視圖。

+0

謝謝您提供非常豐富的答案! – greenoldman

+1

他不能稱爲@@ Html.Partial(「Test」,new {DateTime.Now}'? –

+0

是的,你也可以這樣做,你甚至可以離開新的{},因爲DateTime也是有效的Model。我認爲這個問題更廣泛地涉及Html.Action和Html之間的區別。部分雖然,OP只提到了DateTime.Now作爲測試。 – mfanto

相關問題