Access Parent Model from partial view

2019-02-16 10:56发布

问题:

I'm asking because the partial view I will create is blank, with the purpose of creating a new child entity. I just need a quick, regardless if dirty, way to access the Parent Model from within the partial view. I need the Id of the parent.

Does a partial view automatically have access to the model of the parent?

回答1:

You cannot access the parent model from a partial view unless you pass some value to this partial as parameters when rendering it. For example in your main view:

@model MyViewModel
...
@Html.Partial("_myPartial", new ViewDataDictionary(new { id = Model.Id }));

and then inside your partial you could access the Id:

<div>@ViewBag.Id</div>

Of course this is a pretty lousy way of passing data to a partial view. The correct way is to use a strongly typed view model.



回答2:

I know this is an old topic, but I figured I'd just add my solution to the same problem anyway. I think it's a bit cleaner.

Basically add a model to the partial view.

The encapsulating view:

@model whatever
...
@Html.Partial("partialview", anotherwhatever)

The partial view:

@model anotherwhatever
<div>@Model.something</div>
...

In my case I just needed to pass a string into the partial view (just using it to shorten and partition code), so this was much more elegant than the other solution.

I tried the other solution first and actually couldn't get it to work, it just acted as though the value I passed was blank.



回答3:

This ended up working for me.

@model MyViewModel
...
@Html.Partial("_myPartial", new ViewDataDictionary { { "id", Model.Id } })

And inside the partial view, used this...

<div>@ViewBag.id</div>