Как передать несколько моделей частичным представлениям в ASP.NET MVC

Я читал сообщение Скотта Гатри на Передача ViewData из контроллеров в Views, но я не думаю, что урок нажимает на мой конкретной ситуации.

(Примечание: из-за ограничений, связанных с правами клиента, я не могу говорить о вставке фактического кода, поэтому я извиняюсь, если мой придуманный случай немного глуп/запутан.)

У меня есть контроллер под названием ScenarioController, который обрабатывает различные действия, вращающиеся вокруг создания модели сценария. Различные действия, которые пользователь выполнит, - это общий CRUD сценариев. Я могу создать веб-сайт, который делает это для модели сценария. Тем не менее, я недавно обновил модель Scenario, так что теперь она состоит из различных подкомпонентов (списки других объектов). В соответствующем представлении используются вкладки jQuery, которые загружают частичные представления, в конечном счете, загружают формы в различные данные подкомпонента. К сожалению, именно здесь у меня проблемы.

В настоящее время моя индексная страница выглядит примерно так:

<%@ 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>

И частичные страницы строго типизированы для того, что они представляют (прежде всего List<SomeObject>).

Как хранить данные в модели сценария? Я использую базу данных SQL и взаимодействую с Entity Framework. Мне все еще нужны свойства, представляющие различные списки элементов (поэтому я могу передавать ViewData с использованием строго типизированных классов), или это что-то, что я могу передать в ViewData непосредственно из вызовов сущностей (и при необходимости отбрасывать)?

Ответ 1

Вы можете передать столько моделей, сколько хотите в своем представлении. вам просто нужно сделать инкапсулирующую модель, которая может содержать все ваши модели для отправки.

вы также можете использовать ViewData, но рекомендуется использовать модель.

Вам нужны 3 вкладки для всей модели или только ее части?

скажем, у вас есть 3 модели в вашей инкапсулирующей модели. named tab1 tab2 tab3.

то вы можете отправить каждую Renderpartial соответствующую модель:

        <div id="tab1"><% Html.RenderPartial("Tab1", Model.tab1); %></div>
        <div id="tab2"><% Html.RenderPartial("Tab2", Model.tab2); %></div>
        <div id="tab3"><% Html.RenderPartial("Tab3", Model.tab3); %></div>

ваша инкапсулирующая модель может выглядеть как

namespace MVCNAMESPACE.Models {
    public partial class EnCapModel {
        public List<SomeObject> tab1 { get; set; }
        public List<SomeObject> tab2 { get; set; }
        public List<SomeObject> tab3 { get; set; }
    }
}

надеюсь, что это поможет