2009-07-23 87 views
144

我有一個採用ProductImage的強類型局部視圖,並且在呈現時我還想向它提供一些在包含頁面中動態創建的其他ViewData。我如何通過RenderPartial調用將強類型對象和自定義ViewData傳遞給局部視圖?將附加ViewData傳遞到強類型局部視圖

var index = 0; 
foreach (var image in Model.Images.OrderBy(p => p.Order)) 
{ 
    Html.RenderPartial("ProductImageForm", image); // < Pass 'index' to partial 
    index++; 
} 

回答

208

RenderPartial接受另一個只是ViewDataDictionary的參數。你幾乎沒有,只是把它像這樣:

Html.RenderPartial(
     "ProductImageForm", 
     image, 
     new ViewDataDictionary { { "index", index } } 
); 

注意,這將覆蓋默認的ViewData你的所有其他瀏覽在默認情況下。如果您將任何內容添加到ViewData,它將不會在您傳遞到您的部分視圖的新字典中。

+1

我試圖做到這一點,它正在返回「不能將void轉換爲對象」。 – programad 2012-01-20 00:53:37

+3

@programad嘗試從@ Html.RenderPartial()中刪除@,這爲我解決了這個問題,但我在@ {}代碼塊中的一行中調用了RenderPartial()。 – danjarvis 2012-06-11 15:09:21

+4

我建議在下面檢查ctorx的答案。他將額外的數據添加到現有的ViewData。 – raRaRa 2016-06-24 00:30:06

8

我認爲這不應該工作?

ViewData["currentIndex"] = index; 
+5

雖然這不是一個強有力的方法,但它確實幫助我弄清楚如何從Womp的答案中檢索視圖數據值。 – 2012-02-18 13:10:39

5

創建另一個包含強類型類的類。

將你的新東西添加到課堂並在視圖中返回。

然後在視圖中,確保您繼承了您的新類並更改了現在會出錯的代碼位。即對你的領域的引用。

希望這會有所幫助。如果沒有,那麼讓我知道,我會發布特定的代碼。

4

傳遞附加數據的最簡單方法是將數據作爲@Joel Martinez註釋添加到視圖的現有ViewData中。然而,如果你不想污染你的ViewData,RenderPartial有一個方法可以接受三個參數以及你展示的雙參數版本。第三個參數是一個ViewDataDictionary。您可以構建一個單獨的ViewDataDictionary,僅用於包含您想要傳入的額外數據的部分。

130

爲了擴大在什麼womp貼,你可以通過新的查看數據,同時保留現有的查看數據如果使用ViewDataDictionary的構造函數重載像這樣:

Html.RenderPartial(
     "ProductImageForm", 
     image, 
     new ViewDataDictionary(this.ViewData) { { "index", index } } 
); 
32
@Html.Partial("_Header", new ViewDataDictionary { { "HeaderName", "User Management" }, { "TitleName", "List Of Users" } }) 
or 
@{Html.RenderPartial("_Header", new ViewDataDictionary { { "HeaderName", "User Management" }, { "TitleName", "List Of Users" } });} 

部分頁(_Header):

<div class="row titleBlock"> 
    <h1>@ViewData["HeaderName"].ToString()</h1> 
    <h5>@ViewData["TitleName"].ToString()</h5> 
</div> 
0

您可以使用動態變量ViewBag

ViewBag.AnotherValue = valueToView;