MVC3 - Passing data beyond the model to Partial view

后端 未结 4 386
天命终不由人
天命终不由人 2021-01-30 13:18

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)ViewBag.Tabl

相关标签:
4条回答
  • 2021-01-30 13:51

    You can get even clever as shown here by Craig Stuntz

    Html.RenderPartial("SomePartialView", null, 
        new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter", true }})
            { Model = MyModelObject });
    
    0 讨论(0)
  • 2021-01-30 13:56

    You should be able to just put it in the ViewBag and then access it from the ViewBag in the partial view. See this SO answer.

    0 讨论(0)
  • 2021-01-30 13:59

    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

    0 讨论(0)
  • 2021-01-30 14:12

    I came across this issue as well. I wanted to have a snippet of code reproduced many times, and did not want to copy paste. The code would vary slightly. After looking at the other answers, I did not want to go that exact route and decided instead to just use a plain Dictionary.

    For example:

    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>
    
    0 讨论(0)
提交回复
热议问题