将其他ViewData传递到强types的部分视图

我有一个强types的部分视图,需要一个ProductImage,当它被渲染时,我也想提供一些额外的ViewData,我在包含页面dynamic创build。 我怎样才能通过RenderPartial调用将我的强types对象和我自定义的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的构造函数重载,则可以在保留现有View数据的同时传递新的View数据,如下所示:

 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; 

创build另一个包含强types类的类。

添加你的新东西到课堂并在视图中返回。

然后在视图中,确保你inheritance你的新类,并改变现在会出错的代码位。 即对你的领域的引用。

希望这可以帮助。 如果没有,那么让我知道,我会发布特定的代码。

传递额外数据的最简单方法是将数据添加到视图的现有ViewData中,如@Joel Martinez所注意的那样。 但是,如果你不想污染你的ViewData,那么RenderPartial就有一个方法,它有三个参数和你显示的双参数版本。 第三个参数是一个ViewDataDictionary。 您可以构build一个单独的ViewDataDictionary,仅用于包含要传入的额外数据的部分。

您可以使用dynamicvariablesViewBag

 ViewBag.AnotherValue = valueToView;