MVC3 - передача данных за пределы модели в частичное представление - PullRequest
37 голосов
/ 24 августа 2011

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

EG

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

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

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

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

Ответы [ 4 ]

66 голосов
/ 24 августа 2011

ViewDataDictionary можно использовать для замены словаря ViewData в частичном представлении ... Если вы не передадите параметр ViewDataDictionary, тогда данные представления parial будут такими же, как и у родителей.

Пример того, как использовать его в родительском:

@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 дает строку

7 голосов
/ 24 августа 2011

Вы должны иметь возможность просто поместить его в ViewBag и затем получить доступ к нему из ViewBag в частичном представлении. Смотрите этот SO ответ .

6 голосов
/ 04 июня 2013

Я тоже сталкивался с этой проблемой.Я хотел, чтобы фрагмент кода воспроизводился много раз, и не хотел копировать вставку.Код будет немного отличаться.Посмотрев на другие ответы, я не хотел идти по этому пути и решил вместо этого просто использовать простой 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>
3 голосов
/ 13 декабря 2012

Вы можете получить даже умный , как показано здесь Крейгом Стунцем

Html.RenderPartial("SomePartialView", null, 
    new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter", true }})
        { Model = MyModelObject });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...