J'ai lu le message de Scott Guthrie sur Passing ViewData from Controllers to Views, mais je ne pense pas que la leçon clique pour ma situation spécifique.Comment passer plusieurs modèles à des vues partielles dans ASP.NET MVC
(Note: En raison de restrictions de propriété des clients, je ne peux pas parler coller le code réel, donc je suis désolé si mon composée cas est un peu stupide/confus.)
J'ai un contrôleur appelé ScenarioController qui gère les différentes actions qui tournent autour de la création d'un modèle de scénario. Les diverses actions qu'un utilisateur va compléter sont les CRUD générales des scénarios. Je peux créer un site Web qui fait cela pour le modèle Scénario. Cependant, j'ai récemment mis à jour le modèle Scénario afin qu'il soit maintenant composé de divers sous-composants (listes d'autres objets). La vue correspondante utilise des onglets jQuery qui chargent des vues partielles pour charger les formulaires dans les différentes données de sous-composants. Malheureusement, c'est là que j'ai des problèmes.
Ma page d'index ressemble actuellement quelque chose comme ceci:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm()) {%>
<div id="scenario">
<div id="tabs">
<ul>
<li><a href="#tab1">Tab 1</a></li>
<li><a href="#tab2">Tab 2</a></li>
<li><a href="#tab3">Tab 3</a></li>
</ul>
<div id="tab1"><% Html.RenderPartial("Tab1"); %></div>
<div id="tab2"><% Html.RenderPartial("Tab2"); %></div>
<div id="tab3"><% Html.RenderPartial("Tab3"); %></div>
</div>
<div class="submitButtons">
<input type="button" value="Save Scenario" id="SaveScenario" />
<input type="button" value="Submit Scenario" id="SubmitScenario" />
</div>
</div>
<% } %>
</asp:Content>
Et les pages partielles sont fortement typé à ce qu'ils représentent (principalement List<SomeObject>
).
Comment les données doivent-elles être stockées dans le modèle de scénario? J'utilise une base de données SQL et l'interfaçage avec Entity Framework. Ai-je besoin de propriétés représentant les différentes listes d'éléments (pour que je puisse passer ViewData en utilisant des classes fortement typées), ou est-ce quelque chose que je peux passer directement dans ViewData à partir des appels d'entités?
Ceci est le chemin que je premier a pris. Dans le cas de Model.tab1, tab1 est en fait un EntityCollection, donc j'essaye de faire: Model.tab1.FirstOrDefault() (je n'ai pas besoin de la collection pour l'instant). Je reçois un message d'erreur qui dit: "L'élément de modèle passé dans le dictionnaire est de type" Scénario ", mais ce dictionnaire nécessite un élément de modèle de type" Tab1 "." - Peut-être que je fais juste une erreur stupide? Merci, @Stefanvds! – JasCav
lorsque vous prenez 1 (firstordefault) vous n'avez pas de liste mais seulement 1 élément du type Scenario. donc vous devez changer votre RenderPartial pour prendre 1 Scénario, ou vous faites juste le FirstOrDefault dans le RenderPartial – Stefanvds
Ouais ... Je fais ça. Voici ma vue partielle: <% @ Control Language = "C#" Inherits = "System.Web.Mvc.ViewUserControl"%> - J'apprécie votre aide ... c'est un problème très étrange (et frustrant). –
JasCav