2010-09-22 15 views
10

में आंशिक दृश्य करने के लिए एक से अधिक मॉडल कैसे पारित कि मैं Passing ViewData from Controllers to Views पर स्कॉट गुथरी की पोस्ट पढ़ने किया गया है, लेकिन मुझे नहीं लगता सबक मेरी विशिष्ट स्थिति के लिए क्लिक कर रहा है है।मैं ASP.NET MVC

(नोट: ग्राहक मालिकाना प्रतिबंधों के कारण, मैं वास्तविक कोड पेस्ट बात कर सकते हैं नहीं है, इसलिए मैं माफी माँगता हूँ अगर मेरे बना मामला थोड़ा बेवकूफ/भ्रामक है।)

मैं एक नियंत्रक ScenarioController कहा जाता है जो एक परिदृश्य मॉडल के निर्माण के आसपास घूमने वाली विभिन्न कार्रवाइयों को संभालती है। उपयोगकर्ता द्वारा किए जाने वाले विभिन्न कार्य परिदृश्यों का सामान्य सीआरयूडी होगा। मैं एक वेबसाइट बना सकता हूं जो परिदृश्य मॉडल के लिए ऐसा करता है। हालांकि, मैंने हाल ही में परिदृश्य मॉडल को अपडेट किया है ताकि यह अब विभिन्न उप-घटकों (अन्य वस्तुओं की सूचियों) से बना हो। संबंधित दृश्य 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>)।

कैसे डेटा परिदृश्य मॉडल के भीतर संग्रहित किया जाना चाहिए? मैं एक एसक्यूएल डेटाबेस का उपयोग कर रहा हूं और एंटिटी फ्रेमवर्क के साथ इंटरफेसिंग कर रहा हूं। क्या मुझे अभी भी वस्तुओं की विभिन्न सूचियों का प्रतिनिधित्व करने वाले गुणों की आवश्यकता है (इसलिए मैं दृढ़ता से टाइप की गई कक्षाओं का उपयोग करके व्यूडेटा पास कर सकता हूं), या यह कुछ है जो मैं सीधे आईडी कॉल से व्यूडेटा में पास कर सकता हूं (और आवश्यकतानुसार कास्ट)?

उत्तर

4

आप अपने विचार में जितने चाहें उतने मॉडल पास कर सकते हैं। आपको बस एक encapsulating मॉडल बनाना है जिसमें आपके सभी 'भेजने के लिए' मॉडल हो सकते हैं।

आप भी ViewData का उपयोग कर सकते हैं लेकिन एक मॉडल का उपयोग की सिफारिश की है।

अपने 3 टैब पूरे मॉडल या बस इसे का एक हिस्सा जरूरत है?

मान लें कि अपने encapsulating मॉडल में 3 मॉडल डालते हैं। नाम टैब 1 टैब 2 टैब 3।

ऐसा है तो आप प्रत्येक 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> 

अपने encapsulating मॉडल तो दिखाई दे सकता है की तरह

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; } 
    } 
} 

आशा है कि यह मदद करता है

+0

इस पथ मैं पहली बार है लिया। Model.tab1 के मामले में, टैब 1 वास्तव में एक EntityCollection है, इसलिए मैं ऐसा करने का प्रयास कर रहा हूं: Model.tab1.FirstOrDefault() (मुझे अभी संग्रह की आवश्यकता नहीं है)। मुझे एक त्रुटि संदेश मिलता है जो कहता है: "शब्दकोश में पारित मॉडल आइटम 'परिदृश्य' प्रकार का है, लेकिन इस शब्दकोश के लिए 'टैब 1' प्रकार के मॉडल आइटम की आवश्यकता होती है।" - शायद मैं सिर्फ एक गूंगा त्रुटि कर रहा हूँ? धन्यवाद, @Stefanvds! – JasCav

+0

जब आप 1 (फर्स्टऑर्डफॉल्ट) लेते हैं तो आपके पास सूची नहीं है लेकिन टाइपरियो के प्रकार का केवल 1 आइटम है। तो आपको 1 परिदृश्य लेने के लिए अपने रेंडरपार्टियल को बदलने की जरूरत है, या आप केवल RenderPartial – Stefanvds

+0

हाँ के अंदर FirstOrDefault करते हैं ... मैं ऐसा कर रहा हूं। यहां मेरा आंशिक दृश्य है: <% @ नियंत्रण भाषा = "सी #" इनहेरिट्स = "System.Web.Mvc.ViewUserControl "%> - मैं आपकी मदद की सराहना करता हूं ... यह एक बहुत अजीब (और निराशाजनक) समस्या है। – JasCav