MVC3 - Передача данных за пределы модели в частичный вид
Есть ли способ передать часть дополнительных данных вместе с моделью в частичный вид?
например.
@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table);
Это то, что у меня есть сейчас. Могу ли я добавить что-то еще, не меняя мою модель?
@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table, "TemporaryTable");
Я вижу ViewDataDictionary как параметр. Я не уверен, что делает этот объект или это соответствует моей потребности.
Ответы
Ответ 1
ViewDataDictionary можно использовать для замены словаря ViewData в частичном представлении... Если вы не передаете параметр ViewDataDictionary, то parial viewdata совпадает с родительскими.
Пример использования в родительском объекте:
@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table, new ViewDataDictionary {{ "Key", obj }});
Затем внутри частичного доступа вы можете получить доступ к этому объекту следующим образом:
@{ var obj = ViewData["key"]; }
Совершенно другой подход будет заключаться в использовании класса Tuple для группировки исходной модели и дополнительных данных следующим образом:
@Html.Partial("_SomeTable", Tuple.Create<List<CustomTable>, string>((List<CustomTable>)ViewBag.Table, "Extra data"));
Тип модели для частичного будет тогда:
@model Tuple<List<CustomTable>, string>
Model.Item1 предоставляет объект List и Model.Item2 предоставляет строку
Ответ 2
Вы можете просто поместить его в ViewBag, а затем получить доступ к нему из ViewBag в частичном представлении. См. этот ответ "SO" .
Ответ 3
Я столкнулся с этой проблемой. Я хотел, чтобы фрагмент кода воспроизводился много раз и не хотел копировать пасту. Код будет немного отличаться. Посмотрев на другие ответы, я не хотел идти по этому точному маршруту и решил вместо этого просто использовать простой Dictionary
.
Например:
parent.cshtml
@{
var args = new Dictionary<string,string>();
args["redirectController"] = "Admin";
args["redirectAction"] = "User";
}
@Html.Partial("_childPartial",args)
_childPartial.cshtml
@model Dictionary<string,string>
<div>@Model["redirectController"]</div>
<div>@Model["redirectAction"]</div>
Ответ 4
Вы можете получить даже умный как показано здесь Craig Stuntz
Html.RenderPartial("SomePartialView", null,
new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter", true }})
{ Model = MyModelObject });