Czytałem posta Scotta Guthrie na Passing ViewData from Controllers to Views, ale nie sądzę, że lekcja jest kliknięciem dla mojej konkretnej sytuacji.Jak przekazać wiele modeli do widoków częściowych w ASP.NET MVC
(Uwaga: Ze względu na klientów własnych ograniczeń, nie mogę rozmawiać wklej rzeczywisty kod, więc przepraszam, jeśli mój składa się sprawa jest nieco głupie/dziwne).
Mam kontroler o nazwie ScenarioController który obsługuje różne działania związane z tworzeniem modelu scenariusza. Różne działania, które ukończy użytkownik, to ogólne CRUD scenariuszy. Mogę stworzyć stronę internetową, która zrobi to dla modelu Scenariusza. Niedawno zaktualizowałem model Scenariusz, aby teraz składał się z różnych podskładników (list innych obiektów). Odpowiedni widok wykorzystuje karty jQuery, które ładują widoki częściowe, aby ostatecznie załadować formularze do różnych danych podkomponentu. Niestety, tu mam problemy.
Moja strona Index aktualnie wygląda tak:
<%@ 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>
i częściowa strony są silnie wpisany do tego, co oni reprezentują (głównie List<SomeObject>
).
W jaki sposób dane powinny być przechowywane w modelu scenariusza? Używam bazy danych SQL i współpracuję z Entity Framework. Czy nadal potrzebuję właściwości reprezentujących różne listy elementów (tak, że mogę przekazywać ViewData przy użyciu silnie typowanych klas), czy jest to coś, co mogę przekazać w ViewData bezpośrednio z wywołań encji (i odrzucić w razie potrzeby)?
To jest ścieżka raz pierwszy wziął. W przypadku Model.tab1, tab1 jest faktycznie EntityCollection, więc próbuję zrobić: Model.tab1.FirstOrDefault() (Nie potrzebuję teraz kolekcja). Otrzymuję komunikat o błędzie, który mówi: "Element modelu przekazany do słownika ma typ" Scenariusz ", ale ten słownik wymaga elementu modelu typu" Tab1 "." - Może robię głupi błąd? Dzięki, @Stefanvds! – JasCav
po zrobieniu 1 (firstordault) nie masz listy, ale tylko 1 element typu Scenariusz. więc musisz zmienić Renderpartial na 1 Scenariusz, lub po prostu wykonaj FirstOrDefault wewnątrz RenderPartial – Stefanvds
Tak ... Robię to. Oto mój częściowy widok: <% @ Control Language = "C#" Dziedziczy = "System.Web.Mvc.ViewUserControl"%> - Doceniam twoją pomoc ... jest to bardzo dziwny (i frustrujący) problem. –
JasCav