web-dev-qa-db-fra.com

Accéder au modèle parent à partir d'une vue partielle

Je pose la question parce que la vue partielle que je vais créer est vide, dans le but de créer une nouvelle entité enfant. J'ai juste besoin d'un moyen rapide, même s'il est sale, d'accéder au modèle parent à partir de la vue partielle. J'ai besoin de l'identifiant du parent.

Une vue partielle a-t-elle automatiquement accès au modèle du parent?

14
AnimaSola

Vous ne pouvez pas accéder au modèle parent à partir d'une vue partielle, sauf si vous lui transmettez une valeur en tant que paramètre lors du rendu. Par exemple dans votre vue principale:

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

et à l'intérieur de votre partiel, vous pouvez accéder à la Id:

<div>@ViewBag.Id</div>

Bien sûr, c’est une façon plutôt moche de passer des données à une vue partielle. La méthode correcte consiste à utiliser un modèle de vue fortement typé.

14
Darin Dimitrov

Je sais que c’est un sujet ancien, mais j’ai pensé que j’ajouterais ma solution au même problème de toute façon. Je pense que c'est un peu plus propre.

Fondamentalement, ajoutez un modèle à la vue partielle.

La vue encapsulante:

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

La vue partielle:

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

Dans mon cas, je devais simplement passer une chaîne dans la vue partielle (juste l'utiliser pour raccourcir et partitionner le code), donc c'était beaucoup plus élégant que l'autre solution.

J'ai d'abord essayé l'autre solution et, en réalité, je ne pouvais pas la faire fonctionner. Elle agissait comme si la valeur que j'avais transmise était vide.

2
Yushatak

Cela a fini par travailler pour moi.

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

Et à l'intérieur de la vue partielle, utilisé cette ...

<div>@ViewBag.id</div>
1
JOpuckman