2011-06-01 18 views
14

पर मॉडल खाली है मेरे पास दो मॉडल हैं - श्रेणी और आलेख। मेरे पास दोनों के लिए एक ही हटाने के विचार और नियंत्रक हैं। केवल अंतर यह है कि यह श्रेणियों के लिए काम करता है, लेकिन लेखों के साथ मुझे एचटीपीपोस्ट पर खाली मॉडल मिलता है।एमवीसी 3 -

वर्ग:

public ActionResult DeleteCat(int id) 
    { 
     Category cat = db.CategoryByID(id); 
     if (cat != null) 
     { 
      return View(cat); 
     } 

     return RedirectToAction("Index"); 
    } 

    [HttpPost] 
    public ActionResult DeleteCat(Category model) 
    { 
     db.DeleteCategory(model.CategoryID); 

     return RedirectToAction("Index"); 
    } 

आलेख:

public ActionResult Delete(int id) 
    { 
     Article art = db.ArticleByID(id); 
     if (art != null) 
     { 
      return View(art); 
     } 

     return RedirectToAction("Index"); 

    } 

    [HttpPost] 
    public ActionResult Delete(Article model) 
    { 
     db.DeleteArticle(model.ArticleID); 

     return RedirectToAction("Index"); 
    } 

दोनों विचारों दृश्य स्टूडियो द्वारा उत्पन्न कर रहे हैं और मैं उन्हें नहीं बदला है। जब मैं एक श्रेणी को हटाना चाहता हूं, तो सब कुछ ठीक हो जाता है। लेकिन जब मैं एक लेख को हटाना चाहता हूं, तो इसे पहले डेटाबेस से ठीक से चुना जाता है, फिर दृश्य प्रदर्शित होता है (सबकुछ ठीक है) लेकिन जब मैं डिलीट बटन पर क्लिक करता हूं तो मॉडल खाली होता है (सभी गुण या तो 0, शून्य या झूठे होते हैं) इसलिए db.DeleteArticle एक अपवाद फेंकता है (ArticleID = 0 के साथ कोई आलेख नहीं है)। क्या कोई मुझे किसी भी संकेत के साथ प्रदान कर सकता है कि मुझे क्या जांचना चाहिए या मुझे इसके आसपास कैसे काम करना चाहिए?

+0

क्या आपके अनुच्छेद वर्ग नज़र करता है पसंद? – Keith

+2

क्या पोस्ट किया जाता है? – SLaks

+0

हां, और @ एसएलएक्स की तरह कहते हैं, आप अपने एचटीपीपोस्ट एक्शन ए ला ला 'फॉर्म कोलेक्शन कॉल' में पैरामीटर जोड़ सकते हैं। एक बार पोस्ट करने के बाद, आप फॉर्म के साथ पोस्ट की गई सभी चाबियों/मानों को देखने के लिए संग्रह का निरीक्षण कर सकते हैं। – Keith

उत्तर

6

ऐसा होने के दो प्राथमिक तरीके हैं।

एक तरीका यह है कि आपके पास कस्टम मॉडल बाध्यकारी है जो काम नहीं कर रहा है। मुझे लगता है कि आप सबकुछ बाहर कर रहे हैं ताकि यह लागू न हो।

सबसे संभावित समस्या यह है कि डेटा पोस्ट नहीं हो रहा है। सुनिश्चित करें कि फ़ील्ड के अंदर मौजूद है, वही फ़ॉर्म जो हटाएं बटन पोस्ट कर रहा है।

10

एक ही समस्या थी। मॉडल में मेरी संपत्ति में से एक मॉडल

public String model { get; set; } 

myModel को संपत्ति नाम बदलने के बाद बुलाया गया था। मॉडल ऑब्जेक्ट एक्शन रीसल्ट

+0

यह वास्तव में यादृच्छिक है! मैं इस तरह की एक बग पर विश्वास नहीं कर सकता, और अभी तक हल नहीं किया गया है! – Andy

+2

मेरा पैरामीटर नाम कहा गया था, और एक ही समस्या का कारण बन गया। धन्यवाद! – Derrick

+0

आपका स्वागत है :) – adinas

9

सुनिश्चित करें कि आपका मॉडल गुणों के रूप में इसकी संपत्तियों को चिह्नित कर रहा है (अगर वीबी का उपयोग कर रहा है, या सी # प्राप्त/सेट के साथ), सार्वजनिक क्षेत्र नहीं ... एमवीसी एक मानचित्र को मैप नहीं करेगा सार्वजनिक क्षेत्र, लेकिन सार्वजनिक संपत्ति के लिए होगा।

17

यदि मॉडल में [HttpPost] कार्रवाई में मॉडल के लिए पैरामीटर मॉडल में एक संपत्ति के समान नाम है तो यह शून्य हो जाएगा और यह कहने में विफल रहेगा कि फ़ील्ड अमान्य है।

उदाहरण:

public class ContactMessage { 
    public string Name { get; set; } 
    public string sankdmfskm { get; set; } 
} 

[HttpPost] 
public ActionResult Index(ContactMessage sankdmfskm) 
{ 
... 
} 

sankdmfskmnull हो जाएगा।

एमवीसी 3 और एमवीसी 4 में कोशिश की गई।

2

मुझे आपके जैसी ही समस्या थी। मैंने आपके मामले में

[HttpPost] 
public ActionResult Index(ContactMessage sankdmfskm) 
{ 
UpdateModel(sankdmfskm); 
... 
} 

मॉडल अपडेट होने के बाद यह मुझे उचित मान वापस कर दिया और अब शून्य नहीं हुआ।

0

मैं इसका उत्तर जोड़ रहा हूं क्योंकि यह दूसरों से अलग है और कोई इसे उपयोगी पा सकता है।

मेरे पास बेसव्यूमोडेल था क्योंकि मैं एक दृश्य में कई मॉडलों का उपयोग कर रहा था।

पर बजाय BaseViewModel (और model.RegistrationFormModel.Username जैसे पैरामीटर) में उत्तीर्ण होने की मेरी नियंत्रक कार्रवाई मैं RegistrationFormModel पारित कर दिया तो यह BaseViewModel के लिए बाध्य नहीं कर रहा था मैं मेरे विचार में उपयोग कर रहा था

+0

शायद एक छोटा कोड स्निपेट मदद करेगा – theLearner