传递额外的ViewData到一个强类型的局部视图(Pass Additional ViewData

2019-06-26 14:24发布

我有一个强类型的局部视图,需要一个ProductImage,当它被渲染我也想向它提供我在包含页面动态创建一些额外的ViewData。 我怎么能同时通过我的强类型的对象,我自定义的ViewData与调用的RenderPartial的局部视图?

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

Answer 1:

的RenderPartial需要另一个参数,这只是一种的ViewDataDictionary。 你几乎没有,只是这样称呼它:

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

请注意,这将覆盖默认的ViewData你的所有其他浏览在默认情况下。 如果要添加什么ViewData的,它不会在您传递到您的局部视图这个新字典。



Answer 2:

为了扩大在什么womp贴,你可以 ,如果你使用的构造函数重载通过新的查看数据,同时保留现有的查看数据ViewDataDictionary像这样:

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


Answer 3:

@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>


Answer 4:

我觉得这应该不是吗?

ViewData["currentIndex"] = index;


Answer 5:

创建一个包含你的强类型类另一个类。

新的东西添加到类和视图返回。

然后在视图中,确保你继承你的新类和更改代码,现在将是错误的位。 即引用您的域。

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



Answer 6:

通过额外的数据最简单的方法是将数据添加到现有的ViewData的视图@Joel马丁内斯说。 但是,如果你不想污染您的ViewData,拥有的RenderPartial这三个参数,以及你显示两个参数版本的方法。 第三个参数是一个的ViewDataDictionary。 您可以构建一个独立的ViewDataDictionary只为你的部分只包含额外的要在传递数据。



Answer 7:

You can use the dynamic variable ViewBag

ViewBag.AnotherValue = valueToView;


Answer 8:

this.ViewData.Add( “索引”,索引);

Html.RenderPartial( “ProductImageForm”,图像,this.ViewData);

这也应该工作。



文章来源: Pass Additional ViewData to a Strongly-Typed Partial View