2011-06-05 17 views
12

मैं निम्नलिखित संरचना:asp.net mvc - मॉडल शून्य क्यों है?

Controller.cs

public ActionResult PageMain(string param) 
{ 
    return View(); 
} 

PageMain.cs

namespace project1.Models 
{ 
    public class PageMain 
    { 
     public DataTable dtable 
     { 
      get { 
         // some code that returns a DataTable 
      } 
     } 
    } 
} 

और अंत में ध्यान में रखते हुए:

@using project1.Models 
@model PageMain 

var datatable = Model.dtable // but this is throwing an error since the model is null 

क्या किसी को पता है कि क्यों मेरी मॉडल शून्य वापस आ रहा है? मैं PageMain.cs में डेटाटेबल तक कैसे पहुंच सकता हूं? मैं एमवीसी के लिए नया हूं इसलिए अगर मुझे संरचना में कोई तार्किक त्रुटि है तो कृपया मुझे चेतावनी देने में संकोच न करें :)

+0

क्या यह डेटाटेबल प्रति कॉल अद्वितीय होगा, या यह एक स्थिर मूल्य की तरह कुछ है जिसे आपको एक्सेस प्राप्त करने की आवश्यकता है? –

+0

इसकी सामग्री यूआरएल पैरामीटर – Shaokan

+0

बीटीडब्ल्यू के अनुसार डिज़ाइन की गई है, वह कोड नियंत्रक में है, मॉडल नहीं। – SLaks

उत्तर

10

सबसे पहले, आपको अपने मॉडल को डेटाबेस बनाने के लिए अपना तर्क सेट करने की आवश्यकता है। आप इसे प्राप्त करने के लिए ओआरएम का उपयोग कर सकते हैं।

फिर, अपने नियंत्रक से देखने के लिए अपना मॉडल पास करें। मान लें कि आप नीचे की तरह अपने व्यक्ति मॉडल है कि:

public class Person { 

    public string Name {get;set;} 
    public string SurName {get;set;} 
    public int Age {get;set;} 

} 

विशिष्ट Person डेटा देखने के लिए, आप अपने मॉडल क्वेरी और आप अपने दृश्य के लिए नियंत्रक से इस मॉडल में उत्तीर्ण होना आदेश में:

public ActionResult Index() { 

    var _entities = new MyDataEntity(); 
    var model = _entities.Person; 
    model = model.Where(x => x.Age > 20); 

    return View(model); 

} 

उपरोक्त नियंत्रक आपके विचार में व्यक्ति की सूची उत्तीर्ण कर रहा है। MyDataEntity कक्षा आपकी इकाई ढांचा DataContext कक्षा है।

इसके बाद आपको अपने मॉडल के अंदर @model IEnumerable<Person> डालना होगा। यहां एक उदाहरण दिया गया है:

@model IEnumerable<MyApp.Models.Person> 

<ul> 
@foreach(var item in Model){ 

    <li>Name : @item.Name</li> 
    <li>Surname : @item.Surname</li> 
    <li>Age : @item.Age</li> 

} 

</ul> 
+0

उत्तर के लिए धन्यवाद! – Shaokan

5

आपको View() पर जाने के लिए अपने नियंत्रक में एक मॉडल बनाने की आवश्यकता है।

+0

आह, मैंने सोचा कि जब भी मैं रिटर्न व्यू() खाली छोड़ देता हूं तो यह स्वचालित रूप से इसे संभाला जा रहा था। शायद कि मुझसे गलती हुई थी। धन्यवाद! – Shaokan

3
public ActionResult PageMain(string param) 
{ 
    return View(new PageMain()); 
} 
+0

हां लेकिन फिर भी, अब मेरा डेटाटेबल शून्य लौट रहा है। मैं पेजमैन.cs में डेटाटेबल को दृश्य से कैसे उपयोग कर सकता हूं? – Shaokan

+0

@ सोखन, इसे समझने के लिए डटेबल गेटर कोड देखने की आवश्यकता होगी। –

+0

आह, ठीक है, मैंने इसे समझ लिया है, असल में मैं डटेबल प्राप्त कर सकता हूं लेकिन कोड त्रुटि के कारण यह शून्य हो रहा था :) बहुत बहुत धन्यवाद! – Shaokan

0

यह मेरे साथ हुआ क्योंकि मैं अपने फॉर्म फ़ील्ड के लिए "नाम" विशेषता भूल गया था। डी 'ओह!

0

मुझे एक ही समस्या का सामना करना पड़ा है। मेरी गलती मॉडल के अंदर एक ही नाम के साथ संपत्ति थी।

public class CustomerAddress : BaseEntity 
{ 
    public long CustomerId { get; set; } 


    public string NameSurname { get; set; } 

    public string Region { get; set; } 

    public string City { get; set; } 

    public string Address { get; set; } 

    public string ZipCode { get; set; } 
} 

[HttpPost, ValidateAntiForgeryToken] 
public ActionResult Add(CustomerAddress address){ 

} 

नाम विवादों को प्रतिस्थापित करने के लिए ठीक है।

[HttpPost, ValidateAntiForgeryToken] 
public ActionResult Add(CustomerAddress model){ 

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