2011-04-21 10 views
5

के लिए परिभाषा नहीं है I अलग-अलग AsQueriable() डेटासेट को वापस करने के लिए दो डेटाकॉन्टेक्स्ट ऑब्जेक्ट्स का उपयोग कर रहा हूं और फिर linq का उपयोग करके दोनों में शामिल हो रहा हूं। डेटा निर्माण पूरी तरह से काम करता है हालांकि जब मैं उस संयुक्त डेटासेट को दृश्य में पास करता हूं, तो मुझे त्रुटि मिल रही है 'ऑब्जेक्ट' में 'नाम' की परिभाषा नहीं है।'ऑब्जेक्ट' में 'नाम'

एक डीबग सत्र के दौरान मैं स्पष्ट रूप से देख सकता हूं कि फ़ोरैच लूप में मूल मॉडल और प्रत्येक 'आइटम' दोनों में डेटा और कुंजियां दिखाई देने योग्य/सुलभ हैं। मैं बड़ी उलझन में हूं।

अन्य कई q & ए स्टैक ओवरफ्लो डॉट कॉम पर है जो इस समस्या से मेल खाता है मेरी समस्या का समाधान नहीं करता है और नतीजतन आंखों के एक नए सेट की सराहना करता है और उम्मीद है कि इस समस्या का समाधान होगा।

बहुत धन्यवाद! - कोड समय:

डेटा निर्माण

 public ActionResult SplashImages() 
     { 
      var g = (from i in GetGallerySplash() join o in GetFestivals() on i.Festival equals o.ID orderby i.Rating descending select new {i.Photo, i.OwnedBy, i.Rating, o.Name }); 
      Response.ContentType = "text/xml"; 
      return View(g); 
     } 

     private IEnumerable<Gallery> GetGallerySplash() 
     { 
      GallerysDataContext gdc = new GallerysDataContext(); 
      return (from i in gdc.Galleries orderby i.Rating descending select i).Take(15).AsQueryable(); 
     } 

     private IEnumerable<Festival> GetFestivals() 
     { 
      FestivalsDataContext fdc = new FestivalsDataContext(); 
      return (from i in fdc.Festivals select i).AsQueryable(); 
     } 

VSExpress की त्रुटि स्क्रीन: Exception screenshot

एक समाधान पर कोई मार्गदर्शन बहुत सराहना की जाएगी। धन्यवाद!

<% foreach (dynamic t in Model) { %> 

var के उपयोग t के प्रकार object के रूप में अनुमान लगाया जा करने के लिए खड़ी कर रहा है:

सी

+0

[पहुँचने सी # बेनामी प्रकार वस्तुओं] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/713521/accessing-c-sharp-anonymous-type-objects) – nawfal

उत्तर

4

मैं सुझाव दूंगा कि आप दोनों एकल छवियों को समाहित करने के लिए एक एकल मॉडल बनाएं, उदा।

public class GalleryModel 
{ 
    public IEnumerable<Gallery> Galleries { get; set } 
    public IEnumerable<Festivals> Festivals { get; set; } 
} 

फिर जोरदार मॉडल मैच के लिए अपने दृष्टिकोण को टाइप

...Inherits="System.Web.Mvc.ViewPage<GalleryModel>" 
फिर अपने मॉडल में

, आप टाइप-सुरक्षित रूप से कर सकते हैं प्रत्येक वस्तु, उदा का उल्लेख

<% foreach (var t in Model.Galleries) ... 
+0

धन्यवाद टोबीस 86, मैं इस सटीक दृष्टिकोण को पूरा करने के बारे में था क्योंकि मैंने आपका जवाब देखा था।आप बिल्कुल सही हैं। मैंने संयुक्त डेटासेट के लिए एक नया मॉडल बनाया है और अब पेज पूरी तरह से काम कर रहा है। बहुत धन्यवाद! –

+1

मदद की खुशी है। हमें इसी तरह के परिदृश्यों से निपटना पड़ा है, इसलिए मैं वहां गया हूं :) – tobias86

+1

मुझे विश्वास है कि इसे ** एमवीवीएम ** ('मॉडल व्यू व्यू मॉडेल') डिज़ाइन पैटर्न कहा जाता है। असल में आप अपने मॉडल और व्यू के बीच एक और परत जोड़ते हैं - एक व्यूमोडेल - जिससे आप अपने मॉडल को अधिक दृश्य-अनुकूल प्रारूप में बेहतर तरीके से समाहित कर सकते हैं। एमवीवीएम पैटर्न का उपयोग करने वाले बहुत से लोग अपने प्रोजेक्ट में 'व्यू मॉडल्स' नामक एक और फ़ोल्डर जोड़ते हैं, मॉडल, व्यू, और कंट्रोलर फ़ोल्डरों के उपयोग को अनुकरण करते हैं, और उनके सभी व्यू मॉडेल क्लास को अंदर रखते हैं। –

-1

को पाश के लिए अपने को बदलने की कोशिश करें।

+2

यदि '' Model' IEnumerable 'मैं नहीं है बल्कि एक स्थिर टाइप संस्करण के लिए जाना होगा और एक पॉको परिचय ... 'गतिशील' मूल रूप से शुद्ध प्रतिबिंब है! –

+0

हाय मैथ्यू, मैंने दुर्भाग्य से उस परिवर्तन को लागू किया है, मुझे अभी भी वही त्रुटि मिलती है। –

+0

समस्या यह है कि अनाम प्रकार क्रिया विधि के दायरे से नहीं बच जाएगा और दृश्य केवल मॉडल को टाइप ऑब्जेक्ट के रूप में जानता है। –

1

आप देखने के लिए अनाम प्रकार लौट रहे हैं, इसलिए समस्याएं। उन प्रश्नों पर एक नज़र डालें:

आप वास्तविक कक्षा में आपकी अनाम प्रकार लपेट कर सकते हैं या तो और दृढ़ता से टाइप किया दृश्य का उपयोग, या कुछ गतिशील जादू के साथ खेलते हैं। जुड़े प्रश्न उन विषयों को कवर करते हैं।

संबंधित मुद्दे