10

我一直在阅读 Scott Guthrie 关于将ViewData 从控制器传递到视图的帖子,但我认为这节课并不是针对我的具体情况。

(注意:由于客户的专有限制,我无法粘贴实际代码,所以如果我编造的案例有点愚蠢/令人困惑,我深表歉意。)

我有一个名为 ScenarioController 的控制器,它处理围绕创建 Scenario 模型的各种操作。用户将完成的各种操作是场景的一般 CRUD。我可以为场景模型创建一个网站。但是,我最近更新了 Scenario 模型,现在它由各种子组件(其他对象的列表)组成。相应的视图利用 jQuery Tabs 加载部分视图,最终将表单加载到各种子组件数据。不幸的是,这是我遇到麻烦的地方。

我的索引页面目前看起来像这样:

<%@ 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 数据库并与实体框架交互。我是否仍然需要表示各种项目列表的属性(因此我可以使用强类型类传递 ViewData),还是我可以直接从实体调用中传递 ViewData(并根据需要进行转换)?

4

1 回答 1

4

您可以在视图中传递任意数量的模型。你只需要制作一个可以包含所有“发送”模型的封装模型。

您也可以使用,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; }
    }
}

希望这可以帮助

于 2010-09-22T14:46:01.627 回答