2011-03-30 14 views
6

में देखने के लिए भारी सूची पास करें एएसपी.नेट एमवीसी के लिए नया (अब एमएवी 3 का उपयोग रेजर के साथ) और मैं कंट्रोलर से व्यू में ऑब्जेक्ट को पास करने पर उलझन में हूं। विशेष रूप से, मैं एमवीसी 3 और रॉब कॉनरी के रोचक भारी (http://blog.wekeroad.com/helpy-stuff/and-i-shall-call-it-massive) के साथ प्रयोग कर रहा हूं। मैं एक ब्लॉग के साथ प्रयोग करने के लिए एक सरल वेब अनुप्रयोग के रूप में गड़बड़ कर रहा हूँ।एमवीसी 3

HomeController.cs:

public ActionResult Index() 
     { 
      var table = new DynamicModel("mydb", tableName: "Posts"); 
      //grab all the posts 
      var posts = table.All(); 
      ViewData["Posts"] = posts; 

      return View(); 
     } 

इस भाग महान काम करता है। लेकिन मैं यह कैसे करूँ?

return View(posts); 

मैं देखें, यह त्रुटियों में @posts.PostID संदर्भ है और कहता है, तो यह मान्य नहीं है। इसलिए मैंने डायनामिक मॉडेल के खिलाफ दृढ़ता से टाइप किए गए दृश्य को बनाने का प्रयास किया, लेकिन posts अभी भी वहां नहीं था।

मुझे पता है कि मैं एक व्यूमोडेल बना सकता हूं और उसके खिलाफ दृश्य टाइप कर सकता हूं और वहां अपना डेटा प्लग कर सकता हूं। यह समझने के बारे में अधिक है कि नियंत्रक/व्यू कैसे इंटरैक्ट करते हैं।

धन्यवाद!

उत्तर

2

एएसपी नेट एमवीसी टेम्पलेट्स समाधान है।

सबसे पहले, ViewData का उपयोग करके विशेष रूप से अब एमवीसी 2.0 और 3.0 में निराश हो गया है जहां दृश्य को देखने के लिए कई बेहतर तरीके हैं।

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

उदाहरण के लिए:

 <div> 
      <% for (int i = 0; i < Model.Bars.Count; i++) 
       {%> 
      <h3> 
       <a href="#">Bar 
        <%: String.Format("{0:g}", Model.Bars[i].DocumentDate.ToShortDateString())%></a></h3> 
      <div> 
       <%: Html.DisplayFor(m => m.Bars[i].Content)%> 
      </div> 
      <%}%> 
     </div> 

इस विषय here पर एक बहुत अच्छा श्रृंखला है।

+0

पर्याप्त मेला - लेकिन मैं 'पोस्ट' ऑब्जेक्ट को आंशिक दृश्य में कैसे पास करूं? मैंने दृढ़ता से टाइप किया गया दृश्य बनाया और यह असफल रहा ... –

+0

आप बस 'डिस्प्लेफ़ोर' या 'EditorFor' – Aliostad

+0

नहीं कहते हैं मैंने मैनेनिक से डायनामिक मॉडेल ऑब्जेक्ट के विरुद्ध दृढ़ता से टाइप किया गया दृश्य बनाया है। मैंने इसे अपने एमवीसी के खिलाफ भी कोशिश की। मॉडल। पोस्ट ऑब्जेक्ट। तब मैं 'रिटर्न व्यू (पोस्ट) चला गया;' और दृश्य में 'पोस्ट' को संदर्भित करने का प्रयास किया। यह कहता है कि 'पदों' मौजूद नहीं है। 'DisplayFor' और 'EditorFor' के साथ क्या करना है? मैं पूरी तरह उलझन में हूँ! –

10

सबसे पहले आपको कक्षा बनाने की आवश्यकता है। उदाहरण के लिए:

public class Post : DynamicModel 
{ 
    public Post(): base("db") 
    { 
     PrimaryKeyField = "PostID"; 
    } 

} 

नियंत्रक में आप कर सकते हैं:

public ActionResult Index() 
     { 
      var table = new Post(); 
      var posts = table.All(); 

      return View(posts); 
     } 

तो तुम एक जोरदार टाइप दृश्य बना सकते हैं और IEnumerable को देखें की मॉडल सेट कर सकते हैं। दृश्य इस तरह होगा:

@model IEnumerable<dynamic> 

<h2>Index</h2> 
<ul> 
@foreach (var item in Model) 
{ 
    <li>@item.PostID</li> 
} 
</ul> 
+0

धन्यवाद GeoChatz! IENumerable के बारे में नहीं पता था। – Leonardo