Пропустить дополнительные ViewData для строго типизированного частичного просмотра
У меня есть строго типизированный Partial View, который принимает 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++;
}
Ответы
Ответ 1
RenderPartial принимает другой параметр, который является просто ViewDataDictionary. Вы почти там, просто назовите его вот так:
Html.RenderPartial(
"ProductImageForm",
image,
new ViewDataDictionary { { "index", index } }
);
Обратите внимание, что это переопределит значение ViewData по умолчанию, которое по умолчанию имеют все ваши другие представления. Если вы добавляете что-либо в ViewData, это не будет в этом новом словаре, что вы переходите к частичным представлениям.
Ответ 2
Чтобы распространить на то, что опубликовала womp, вы можете передавать новые данные View, сохраняя существующие View Data, если вы используете перегрузку конструктора ViewDataDictionary
следующим образом:
Html.RenderPartial(
"ProductImageForm",
image,
new ViewDataDictionary(this.ViewData) { { "index", index } }
);
Ответ 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>
Ответ 4
Я думаю, что это не должно работать?
ViewData["currentIndex"] = index;
Ответ 5
Создайте еще один класс, который содержит ваш строго типизированный класс.
Добавьте свой новый материал в класс и верните его в виде.
Затем в представлении убедитесь, что вы наследуете свой новый класс и изменяете бит кода, который будет теперь ошибочным. а именно ссылки на ваши поля.
Надеюсь, это поможет. Если нет, то дайте мне знать, и я отправлю конкретный код.
Ответ 6
Самый простой способ передать дополнительные данные - это добавить данные в существующие ViewData для представления, как отмечает @Joel Martinez. Однако, если вы не хотите загрязнять свои ViewData, RenderPartial имеет метод, который принимает три аргумента, а также версию с двумя аргументами, которую вы показываете. Третий аргумент - это ViewDataDictionary. Вы можете построить отдельный ViewDataDictionary только для частичного, содержащего только дополнительные данные, которые вы хотите передать.
Ответ 7
Вы можете использовать динамическую переменную ViewBag
ViewBag.AnotherValue = valueToView;
Ответ 8
Это также должно работать.
this.ViewData.Add("index", index);
Html.RenderPartial(
"ProductImageForm",
image,
this.ViewData
);