Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MVC3 - Passing data beyond the model to Partial view

Is there a way to pass a piece of extra data along with a model to a Partial view?

E.G.

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

Is what I have now. Can I add something else without changing my Model?

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

I see ViewDataDictionary as a param. I am not sure what this object does or if this meets my need.

like image 492
P.Brian.Mackey Avatar asked Aug 24 '11 14:08

P.Brian.Mackey


People also ask

Can we use model in partial view?

Partial Views can use the Page Model for their data whereas Child Actions use independent data from the Controller. Editor/Display templates pass items from the model to the system but can be overridden by user partial views.


1 Answers

ViewDataDictionary can be used to replace the ViewData dictionary in the partial view... If you don't pass a ViewDataDictionary parameter then the parial's viewdata is the same as the parents.

An example of how to use it in the parent is:

@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table, new ViewDataDictionary {{ "Key", obj }}); 

Then within the partial you can access this obj as follows:

@{ var obj = ViewData["key"]; } 

A completely different approach woud be to use the Tuple class to group both the original model and extra data together as follows:

@Html.Partial("_SomeTable", Tuple.Create<List<CustomTable>, string>((List<CustomTable>)ViewBag.Table, "Extra data")); 

The model type for the partial would then be:

@model Tuple<List<CustomTable>, string> 

Model.Item1 gives the List object and Model.Item2 gives the string

like image 55
Martin Booth Avatar answered Nov 12 '22 19:11

Martin Booth