2009-07-09 11 views
5

मैं DinnerForm.ascxअद्यतन कर रहा है माता-पिता/ASP.Net MVC में मॉडल बाइंडरों साथ बाल रिकॉर्ड्स

<p> 
    <%int i = 0; 
    foreach (NerdDinner.Models.RSVP rsvp in this.Model.Dinner.RSVPs) 
     { %> 

     <%= Html.Hidden("Dinner.RSVPs[" + i + "].RsvpID", rsvp.RsvpID)%> 
     <%= Html.Hidden("Dinner.RSVPs[" + i + "].DinnerID", rsvp.DinnerID)%> 
     <%= Html.TextBox("Dinner.RSVPs[" + i + "].AttendeeName", rsvp.AttendeeName)%> 
    <% i += 1; 
    } %> 
    </p> 

यह इस प्रतिपादन है के लिए निम्न कोड जोड़कर बच्चे रिकॉर्डों को संपादित करने के लिए Nerd Dinner आवेदन को संशोधित किया है:

<p> 
    <input id="Dinner_RSVPs[0]_RsvpID" name="Dinner.RSVPs[0].RsvpID" type="hidden" value="36" /> 
     <input id="Dinner_RSVPs[0]_DinnerID" name="Dinner.RSVPs[0].DinnerID" type="hidden" value="63" /> 
     <input id="Dinner_RSVPs[0]_AttendeeName" name="Dinner.RSVPs[0].AttendeeName" type="text" value="kp" /> 
    <input id="Dinner_RSVPs[1]_RsvpID" name="Dinner.RSVPs[1].RsvpID" type="hidden" value="37" /> 
     <input id="Dinner_RSVPs[1]_DinnerID" name="Dinner.RSVPs[1].DinnerID" type="hidden" value="63" /> 
     <input id="Dinner_RSVPs[1]_AttendeeName" name="Dinner.RSVPs[1].AttendeeName" type="text" value="jim" /> 

    </p> 

मैंने डिनर कंट्रोलर की पोस्ट एडिट एक्शन विधि में संशोधन नहीं किया है। अभिभावक रात्रिभोज सामान्य रूप से अपडेट हो रहा है, लेकिन यह अपडेटमोडेल (रात्रिभोज) दिखाई देता है; बच्चे आरएसवीपी रिकॉर्ड देख/अपडेट नहीं कर रहा है।

मैंने बाल अभिलेखों को प्रस्तुत करने में कुछ बदलाव किए हैं ताकि मॉडल बाइंडर्स कोई भाग्य के साथ संग्रह को देख सकें।

अपडेटमोडेल (अभिभावक) को कॉल करके एक शॉट में अभिभावक/बाल अभिलेख अपडेट कर रहा है; वर्तमान मॉडल बाइंडर्स के साथ संभव है?

उत्तर

4

मैं इसे स्वयं करने में सक्षम नहीं हूं।

मुझे पता है कि आप एक ही बच्चे तत्व, यानी, रात्रिभोज। आरएसवी स्वचालित रूप से अपडेट कर सकते हैं। मैंने कभी बच्चे को अंकुरित करने की क्षमता कभी नहीं देखी है, जिसके लिए बाध्यकारी की आवश्यकता होगी कि कौन सी संपत्ति आईडी है और इसके लिए देखो (यानी, डिनर.आरएसवीपी। जहां (आर => आर.आरएसवीपी_आईडी == इनपुट_आईडी) और फिर अद्यतन करें)। मुझे ऐसा कुछ करने के लिए कस्टम बाइंडिंग के बारे में पर्याप्त जानकारी नहीं है।

तो आप करते हैं:

UpdateModel("Dinner", Dinner); 

माता-पिता और उसके बाद अद्यतन करने के लिए:

हालांकि, क्या मैंने किया है एक पाश प्रतिसाद करने और उपसर्ग के रूप में पूर्णांक करते हैं और निर्दिष्ट करने के लिए है

int i = 0; 

foreach (var r in Dinner.RSVPs) { 
    UpdateModel(r, "Dinner.RSVPs[" + i++ + "]"); 
} 

काफी साफ नहीं है, लेकिन यह मेरे लिए अच्छा काम करता है। यह सत्यापन में निर्माण करने के लिए थोड़ा और प्रयास कर सकता है, हालांकि (आप एक ही समय में सभी को मान्य करना चाहते हैं, और सुनिश्चित करें कि आप किसी त्रुटि के साथ पहले आरएसवीपी पर दृश्य पर वापस नहीं आते हैं)।

EDIT: ओपी के समाधान को प्रतिबिंबित करने के लिए कोड को फिक्स्ड करें, जिसमें मेरे पैरामीटर ऑर्डर में एक बग भी शामिल है। ऐसा कहा जा रहा है कि, मैं एक चल रहे पूर्णांक की तुलना में RSVP.ID प्रॉपर्टी का उपयोग करके अधिक आरामदायक हूं। जब तक आप जानते हैं कि डिनर। आरएसवीपी पोस्ट पर जीईटी के रूप में समान होंगे (मुझे अपने कोड में इसका विश्वास है), फिर आरएसवीपी.आईडी का उपयोग करना काम करेगा। आरएसवीपी अलग होना चाहिए, तो केवल दोनों पर मौजूद ही अपडेट हो जाएंगे। हालांकि, अनुक्रमिक int का उपयोग संभावित रूप से गलत ऑब्जेक्ट को अद्यतन करने का कारण बन सकता है।

आशा है कि मदद करता है, जेम्स

+0

@jamesshannon यह उत्तर करीब है। int i = 0 पढ़ने के लिए लूप में अपना अपडेट मॉडल ठीक करें; foreach (Dinner.RSVPs में RSVP r) { UpdateModel (आर, "Dinner.RSVPs [" + मैं + "]"); i ++; } और हम इसे पूरा/उत्तर चिह्नित कर सकते हैं। –

0

ठीक है, इसलिए कोई भी जवाब नहीं दे रहा है। मैं nerddinner ऐप नहीं जानता लेकिन आपकी समस्या से रूचि थी। कुछ जवाब देखने की उम्मीद कर रहा था लेकिन, ठीक है, अभी तक कोई नहीं। एनडीनर के साथ परिचितता की कमी के कारण 100% निश्चित नहीं है, लेकिन क्या यह this post से संबंधित हो सकता है, जहां वे केवल संपत्ति को स्पष्ट रूप से पारित होने पर बाध्यकारी/अद्यतन का उल्लेख करते हैं?

0

आपका प्रश्न है UpdateModel (पैरेंट) को फोन करके एक शॉट में माता पिता/बच्चे रिकॉर्ड को अपडेट करते है; वर्तमान मॉडल बाइंडर्स के साथ संभव है?

हां, यह संभव है।हालांकि, यह नहीं संभव (बिना कुछ मामूली समाधान) यदि आप Linq करने वाली Sql का उपयोग कर रहे हैं और अपने बच्चे वस्तुओं के माध्यम से EntitySet<T> के बजाय कुछ IList<T> की तरह सामने आ रहे हैं। मेरा मानना ​​है कि यह एएसपी.NET 4.0 के साथ एमवीसी के अगले संस्करण में संबोधित किया जाएगा (किया गया है?)। हालांकि, समय के लिए, एमवीसी डिफ़ॉल्ट मॉडल बांधने वाला यह समझ में नहीं आता है कि EntitySet के साथ कैसे काम करना है।

कृपया यह other answer देखें, मैंने कुछ समय पहले एक संबंधित प्रश्न पर लिखा था, इस बारे में विवरण के साथ कि मैं कुछ सरल मामलों में इस स्थिति के साथ कैसे काम कर रहा हूं (आसपास काम कर रहा हूं)। ऐसा करने में, मुझे डीडीडी/ओओपी परिप्रेक्ष्य से यह समाधान "आदर्श" कैसे है, इस बारे में चिंता करने से रोकना पड़ा कि एमवीसी और एलटीएस को न्यूनतम प्रयास के साथ अच्छी तरह से खेलने के लिए व्यापार-बंद के रूप में।

नोट, मैं स्वीकार करूंगा कि जेम्स एस का समाधान शायद "शुद्ध" है, लेकिन जैसा कि आप पूछते हैं, "एक शॉट" में ऐसा करने के लिए, आपको या तो एएसपी.NET 4.0, या उपयोग की प्रतीक्षा करनी होगी एक अन्य कामकाज जो आपको मेरी दूसरी पोस्ट में मिलेगा।

शुभकामनाएं!

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