Как передать несколько моделей частичным представлениям в ASP.NET MVC - PullRequest
10 голосов
/ 22 сентября 2010

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

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

У меня есть контроллер с именем ScenarioController, который обрабатывает различные действия, связанные с созданием модели сценария. Различные действия, которые пользователь выполнит, являются общими CRUD сценариев. Я могу создать веб-сайт, который делает это для модели сценария. Однако недавно я обновил модель сценария, чтобы она теперь состояла из различных подкомпонентов (списков других объектов). Соответствующее представление использует вкладки 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 Ответ

4 голосов
/ 22 сентября 2010

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

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

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

скажем, у вас есть 3 модели в вашей модели инкапсуляции.с именем 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; }
    }
}

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

...