2011-04-09 63 views
2

我正在開發一個小MVC應用程序。查看大量組件。多個模型對象?

問題:我有一個視圖頁面,它有一個表單添加事件,一個窗體來搜索事件和事件列表。

將組件放在單個視圖中並不是什麼大事,但我需要它們放在一個頁面中。我想要一個永久的形式在事件列表之上。

問題是,我不知道如何選擇作爲視圖的模型對象。如果我選擇一個事件列表,它與列表完美配合,但與表格完全無關。如果我選擇一個適合形式列表的問題的特定模型對象。

用窗體,列表處理這些視圖的最好方法是什麼?

這是我的觀點:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="ViewPage<EventPlaza.Web.Models.EventsListViewModel>" %> 
<%@ Import Namespace="EventPlaza.Storage.Model" %> 
<%@ Import Namespace="EventPlaza.Web.HtmlHelpers" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Home Page 
</asp:Content> 



<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<div id="EventControlsContainer"> 
      <h3><a href="#">Add Event Link</a></h3> 
       <div>      
      <% Html.RenderPartial("AddEvent", new AddEventModel()); %> 
      </div> 
      <h3><a href="#">Search for Events</a></h3> 
       <div> 
    <form> 
      Place: 
     <input id="elementID" name="elementID" type="text" class="inputSearch" /> 
      Date: 
     <input id="datepicker" name="elementID2" type="text" class="inputSearch" /> 
     <input id="addEvent" type="submit" value="Find Events" /> 
    </form> 
</div> 
     </div>  

    <% foreach(var product in Model.Events) { %> 
    <% Html.RenderPartial("EventSummary", product); %> 
<% } %> 


    <div class="pager"> 
    <%: Html.PageLinks(Model.PagingInfo, 
     x => Url.Action("List", new {page=x})) %> 
</div> 
</asp:Content> 

這個的addEvent視圖控制:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<EventPlaza.Storage.Model.AddEventModel>"%> 

       <% Html.EnableClientValidation(); %> 
<% using (Html.BeginForm("AddEvent", "Event", FormMethod.Post)) { %> 
        Event Link:  
        <%: Html.TextBoxFor(x => x.EventLink) %>      
         Event Name:        
        <%: Html.TextBoxFor(x => x.EventName) %><br /> 
         Place:        
        <%: Html.TextBoxFor(x => x.Place) %>  
         Starting Date:        
        <%: Html.TextBoxFor(x => x.StartingDate) %> <br /> 
         End Date: 
        <%: Html.TextBoxFor(x => x.EndDate) %>  
        <input id="Submit" type="submit" value="Add Event" /> 
      <% } %> 

回答

4

我強烈建議您不要使用從您的域模型的模型對象直接作爲類型相反,你應該製作一個自定義的EventViewModel,並保留三個不同的對象與你擁有的每個局部視圖相對應。

+0

我是否明白這一點?你的意思是一個EventViewModel類,基本上有3個變量用於3個不同的需要的部分視圖? – Ben 2011-04-09 19:37:21

+1

是的。這就是你應該塑造一切的方式。在線教程中,他們將所有內容都放在一個地方,並將域模型直接用於視圖,但這不是一個好的模式。您應該有一個單獨的類(例如EventViewModel),它具有該視圖中所需的完全信息。應該在您的域模型和視圖模型之間進行抽象。 – neebz 2011-04-10 09:37:22