Подтвердить что ты не робот

MVC3 - Передача данных за пределы модели в частичный вид

Есть ли способ передать часть дополнительных данных вместе с моделью в частичный вид?

например.

@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table);

Это то, что у меня есть сейчас. Могу ли я добавить что-то еще, не меняя мою модель?

@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table, "TemporaryTable");

Я вижу ViewDataDictionary как параметр. Я не уверен, что делает этот объект или это соответствует моей потребности.

4b9b3361

Ответ 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 });