2011-03-12 11 views
17

पर बाध्यकारी मैं एएसपी.NET एमवीसी 3 पर हूं, और इसमें समर्थित फीचर सूची द्वारा जा रहा है, मुझे बॉक्स से बाहर काम करने वाले डिफ़ॉल्ट जेसन मॉडल बाध्यकारी करने में सक्षम होना चाहिए। हालांकि मैं जेसन से एक्शन विधि पैरामीटर में एक सरणी/संग्रह को बाध्य करने में सफल रहा हूं। हालांकि मुझे सरल जेसन ऑब्जेक्ट बाध्यकारी काम करने का अधिकार मिला। अगर यहां कोई विशेषज्ञ मुझे बता सकता है कि मैं गलत क्या कर रहा हूं तो बहुत सराहना होगी।एएसपी.NET एमवीसी 3 - JSON मॉडल सरणी

सर्वर साइड कोड पहले:

यहाँ कोड है

// कार्रवाई विधि

public JsonResult SaveDiscount(IList<Discount> discounts) 
    { 
     foreach(var discount in discounts) 
     { 
     .... 
     } 
    } 

// देखें मॉडल

public class Discount 
{ 
    string Sku{get; set;} 
    string DiscountValue{get; set;} 
    string DiscountType{get; set;} 

} 

// क्लाइंट साइड (jQuery/जेएस):

- जिसका अर्थ है गुण अशक्त हैं

[ 
    {"Sku":"sku1","DiscountType":"type1","DiscountValue":"10"},  
    {"Sku":sku2","DiscountType":"type1","DiscountValue":"12"}, 
    {"Sku":"sku3","DiscountType":"type2","DiscountValue":"40"} 
] 

और सर्वर साइड पर मैं देख पा रहे हैं IList<Discount> छूट 3 खाली Discount वस्तुओं के साथ भर जाने के बाद:

मैं Fiddler में json पेलोड की जाँच करें और यह नीचे की तरह लग रही किया लेकिन छूट तर्क की लंबाई 3.

+15

आपके मॉडल की गुणों को 'सार्वजनिक' चिह्नित किया जाना चाहिए। टाइपो या निरीक्षण? –

+0

वाह आदमी! वह एक निरीक्षण था !!! क्या आप इसे उत्तर के रूप में दर्ज करना चाहते हैं ताकि मैं इसे चिह्नित कर सकूं? :) – thanikkal

+5

आपकी बाकी पोस्ट सही होने के कारण धन्यवाद (गायब 'प्रकाशन' के अलावा), मैंने सामग्री को JSON.stringify का उपयोग करने के साथ सेट किया जा रहा है और यह सभी अंतर बना दिया। घंटों के लिए इस के साथ संघर्ष किया! धन्यवाद! –

उत्तर

14

Cresnet Fresh के रूप में प्रश्नों की टिप्पणियों में सही ढंग से बताया गया कि मॉडल गुणों को सार्वजनिक रूप से चिह्नित किया जाना चाहिए।

तो Discount वर्ग को संशोधित करने के बाद इसे हल किया गया।

public class Discount 
{ 
    public string Sku{get; set;} 
    public string DiscountValue{get; set;} 
    public string DiscountType{get; set;} 

} 
+0

क्या कोई भी इस मामले के बारे में बताए जाने के लिए (या अभी तक एक स्पष्टीकरण से जुड़ा हुआ) समझा सकता है? मुझे लगता है क्योंकि पहले एक खाली वस्तु बनाई गई है (इसलिए पैरामीटर रहित कन्स्ट्रक्टर की आवश्यकता है) और फिर गुण सेट किए गए हैं, लेकिन मैं तथ्यों पर काम करना पसंद करता हूं, अनुमान नहीं। – RyanfaeScotland

-1

आपका कोड ठीक लग रहा है .. लेकिन इस

  1. रूटिंग सेटिंग्स की जाँच है। SaveDiscount

पर

  • रखें [HttpPost] विशेषता है और इस

    var catalogDiscount = JSON.stringify({ discounts: jsondatacoll }); 
    

    कि सही डेटा बाइंडिंग कर देना होगा की कोशिश करो।

  • +0

    धन्यवाद यहां जवाब देना जैसा कि उपर्युक्त टिप्पणियों में बताया गया है, मैं अपने व्यूमोडेल गुणों को सार्वजनिक रूप से चिह्नित करने से चूक गया। – thanikkal

    11

    जबकि @thanikkal इस विशेष प्रश्न का उत्तर दिया, मैं एक ही लक्षण और एक बहुत ही समान सेटअप था।

    काम नहीं करने के लिए यह वास्तव में था मेरी jQuery विधि बाध्यकारी मॉडल के कारण public या { get; set; } अपने मॉडल में के बजाय

    ! (RAWR!)

    मैं के बजाय $.post (जो काम नहीं किया) का उपयोग कर रहा था।


    काम नहीं करता:

    $.post("/Games/Action", 
        { "userId": "1", "listName": [ { "fooId": "2", "barId": "99" } ] }, 
        'json', 
        true 
    ); 
    

    मूल्यों Form.Data [] में हैं, लेकिन ठीक से मैप नहीं कर रहे हैं।


    काम करता है:

    $.ajax(
        { 
         url: '/Games/Action', 
         type: 'POST', 
         data: JSON.stringify({ userId: "1", listName: [ { fooId: 2, barId: 99 } ] }), 
         dataType: 'json', 
         contentType: 'application/json; charset=utf-8', 
         success: function (data, textStatus, jqXHR) 
         { 
          console.log(data); 
         }, 
         error: function (objAJAXRequest, strError) 
         { 
          console.log(data); 
         } 
        }); 
    

    सभी मूल्यों को सही ढंग से मैप किया।


    इस के लिए कुछ घंटे खो गए, उम्मीद है कि इससे दूसरों की मदद मिलती है।

    +2

    मैं पुष्टि कर सकता हूं कि उपर्युक्त सत्य है। मैं $ .post का उपयोग कर रहा था और जब भी मैं अपने मॉडल में आबादी वाला एक सरणी देख रहा था, तो मूल्य सभी शून्य थे। $ .ajax पर स्विच करने से इस मुद्दे को हल किया गया है जो अजीब लगता है। मैं एमवीसी 4 का उपयोग कर रहा था, jQuery 2.0.2 –

    +0

    यह एक lifesaver था। बहुत धन्यवाद। –

    +0

    आपको बहुत बहुत धन्यवाद! मैं इस पर लगभग 5 घंटे खो दिया! – Aviatrix

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