簡體   English   中英

將額外的 ViewData 傳遞給強類型的局部視圖

[英]Pass Additional ViewData to a Strongly-Typed Partial View

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

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

RenderPartial 采用另一個參數,它只是一個 ViewDataDictionary。 你快到了,就這樣稱呼它:

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

請注意,這將覆蓋默認情況下所有其他視圖具有的默認 ViewData。 如果您要向 ViewData 添加任何內容,則它不會出現在您傳遞給局部視圖的這個新字典中。

為了擴展 womp 發布的內容,如果您使用ViewDataDictionary的構造函數重載,您可以傳遞新的視圖數據,同時保留現有的視圖數據,如下所示:

Html.RenderPartial(
      "ProductImageForm", 
       image, 
       new ViewDataDictionary(this.ViewData) { { "index", index } }
); 
@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>

我認為這應該有效嗎?

ViewData["currentIndex"] = index;

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

將您的新內容添加到課程中並在視圖中返回。

然后在視圖中,確保您繼承了新類並更改了現在將出錯的代碼位。 即對您的字段的引用。

希望這可以幫助。 如果沒有,請告訴我,我會發布特定的代碼。

傳遞額外數據的最簡單方法是將數據添加到視圖的現有 ViewData 中,如@Joel Martinez 所述。 但是,如果您不想污染 ViewData,RenderPartial 有一個方法,它接受三個參數以及您顯示的兩個參數版本。 第三個參數是一個 ViewDataDictionary。 您可以為您的部分構建一個單獨的 ViewDataDictionary,其中僅包含您想要傳入的額外數據。

我知道這是一篇舊帖子,但我在使用 core 3.0 遇到類似問題時遇到了它,希望它對某人有所幫助。

@{
Layout = null;
ViewData["SampleString"] = "some string need in the partial";
}

<partial name="_Partial" for="PartialViewModel" view-data="ViewData" />

這也應該有效。

this.ViewData.Add("index", index);

Html.RenderPartial(
      "ProductImageForm", 
       image, 
       this.ViewData
); 

您可以使用動態變量 ViewBag

ViewBag.AnotherValue = valueToView;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM