web-dev-qa-db-fra.com

passer un modèle différent à la vue partielle

J'essaie de passer un modèle différent à la vue partielle à partir d'une vue. J'ai deux actions de contrôleur distinctes pour les deux et deux modèles de vue différents. Mais quand j'appelle la vue partielle de l'intérieur de la vue, cela me donne l'erreur

L'élément de modèle transmis au dictionnaire est de type "Application.ViewModels.Model1ViewModel", mais ce dictionnaire nécessite un élément de modèle de type "Application.ViewModels.PartialViewModel".

Je l'appelle comme ça:

 @Html.Partial("_CreateUniFunctionPartial")

l'appel du modèle dans la vue est

@model Application.ViewModels.Model1ViewModel

et le modèle dans le fichier de vue partielle est

@model Application.ViewModels.PartialViewModel

Je ne sais pas comment passer la vue partielle afin qu'elle ne donne pas cette erreur.

ÉDITER

Vue partielle

@model Application.ViewModels.PartialViewModel



 @using (Html.BeginForm("partialview", "ApplicationDetail", FormMethod.Post)) 
  {


<div class="form-horizontal">
    <h4>UniFunctionViewModel</h4>
    <hr />
    @Html.ValidationSummary(true)





    <div class="form-group">
        @Html.LabelFor(model => model.detail, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.detail, new { @placeholder = "Further Information" })
            @Html.ValidationMessageFor(model => model.detail)
        </div>
    </div>


</div>

}

17
user3541362

vous utilisez la bonne méthode mais ne passez pas les bons arguments

vous voudrez peut-être l'essayer comme ceci:

@Html.Partial("~/[path_to_root_only_if_exists]/_CreateUniFunctionPartial.cshtml", new Application.ViewModels.PartialViewModel())

si vous ne passez pas dans un modèle, il prendra automatiquement celui de son parent, qui dans votre cas est

Application.ViewModels.Model1ViewModel
29
alexo

Une chose que vous devrez faire est de régénérer un modèle ou d'utiliser une propriété dans le modèle. Par exemple:

 public class OuterViewModel
 {
     public InnerViewModel InnerViewModel { get; set; }
 }

 public class InnerViewModel
 {
     public string SomeProperty { get; set; }
 }

Dans la page supérieure, vous pouvez accepter le OuterViewModel, puis passer le InnerViewModel au partiel.

Outer.cshtml:

 @model OuterViewModel
 @Html.Partial("_InnerPartial", Model.InnerViewModel)

_InnerPartial.cshtml:

 @model InnerViewModel
 @using (Html.BeginForm("Inner", "Controller"))
 {
      <div>
          @Html.AntiForgeryToken()
          @Html.TextBoxFor(m => m.SomeProperty)
          <input type="submit" value="Save" />
      </div>
 }
9
Zachare Sylvestre

C'est assez simple à faire. Il existe une directive html qui peut rendre une vue partielle. Voici l'exemple de code:

 @Html.Partial("nameOfPartial", Model)

Maintenant, le modèle peut provenir de votre contrôleur principal.

ou vous pouvez définir une nouvelle action de contrôleur avec partialviewresult comme type de retour et essayer de la rendre dans la page comme ceci:

@{Html.RenderAction("Someaction", "somecontroller");}
2
qamar