2010-01-04 8 views
15

मैं अपने नियंत्रक करने के लिए प्रकार <int,int> का एक शब्दकोश पारित करने के लिए इच्छुक हूँ करने के लिए। यहां मुख्य कारण यह है कि पोस्ट में 1-3 कुंजी मान जोड़े के बीच हो सकता है (इन मानों में से कोई भी संकलन समय पर ज्ञात नहीं है) और भविष्य में यह 5 तक जा सकता है।पास शब्दकोश एक अजाक्स पोस्ट के माध्यम से नियंत्रक asp.net MVC के

इसके अलावा मेरे पास पोस्ट भी है कुछ अन्य डेटा, जैसे आईडी और नाम में पास करने के लिए, जो सभी सामान्य के रूप में काम करते हैं।

मैं जावास्क्रिप्ट में इस dictionay कैसे बनाएगी तो JQuery पोस्ट के माध्यम से भेज और अंत में नियंत्रक कार्रवाई करने के लिए पर इसे प्राप्त?

संपादित करें 2: मैं बस के बजाय एक शब्दकोश पारित करने के लिए कोशिश कर के प्रत्येक मान के लिए एक पोस्ट के साथ इस का समाधान करने का फैसला किया।

संपादित करें: यहाँ समारोह के लिए अपने स्रोत है ताकि आप मैं क्या कोशिश कर रहा हूँ देख सकते हैं:

function BindAddMenuItem() { 
     $(".AddMenuItem").click(function (e) { 
      e.preventDefault(); 

      //get header id from link by removing addmenuitem from this.id 
      var currentId = $(this).attr("id").replace("AddMenuItem", ""); 

      //get itemnumber, itemname, itemdetails from textboxes with same header id 
      var restaurantId = jQuery.trim($("#RestaurantId").val()); 
      var itemNumber = jQuery.trim($("#ItemNumber" + currentId).val()); 
      var itemName = jQuery.trim($("#ItemName" + currentId).val()); 
      var itemDetails = jQuery.trim($("#ItemDetails" + currentId).val()); 

      var costs = new Object(); 
      //select all textboxes with class "Header" + currentId 
      $(".Header" + currentId).each(function (i) { 
       var optionId = $(this).attr("id").replace("Option", ""); 
       costs[optionId] = $(this).val(); 
      }); 


      $.ajax(
      { 
       type: "POST", 
       url: "/Menu/AddMenuItem", 
       data: "reastaurantId=" + restaurantId + "&menuHeaderId=" + currentId + "&itemNumber=" + itemNumber + "&itemName=" + itemName + "&itemDetails=" + itemDetails + "&costs=" + costs, 
       dataType: "html", 
       success: function (result) { 
        var domElement = $(result); 
        $("#MenuContainer").replaceWith(domElement); 
        var newNum = parseInt(itemNumber) + 1; 
        $("#ItemNumber" + currentId).val(newNum); 
        BindAllBehaviours(); 
       } 
      }); 
     }); 

    } 

उत्तर

18

कुछ की तरह (जावास्क्रिप्ट)

dict = new Object(); 
dict['12'] = 5; 
dict['13'] = 6; 
dict['1000'] = 21; 
dict['9'] = 13; 
dict['13'] = 48; 

$.post('/client.mvc/mypostaction/', { myDictionary: dict }); 

फिर आप को dict वस्तु पोस्ट कर सकते हैं संपत्ति नियंत्रक के रूप में Dictionary<int, int> का उपयोग कर आपका नियंत्रक।

लेखक का कोड दूसरी बार से
ActionResult MyPostAction(Dictionary<string, int> myDictionary) 

संपादित करें:

मेरे लिए निम्नलिखित काम करता है, जब एक Dictionary<string, int> kvPairs रही है। <int, int> सभी के बाद काम नहीं करेगा।

var dict = new Object(); 
dict['13'] = 9; 
dict['14'] = 10; 
dict['2'] = 5; 

$.post('controller.mvc/Test', { 'kvPairs': dict }, function(obj) { $('#output').html(obj.Count); }); 
+0

जब शब्दकोश गुजर तरह आप सुझाव है मैं एक अशक्त वस्तु मिलता है। मैंने अपना स्रोत दिखाने के लिए अपना प्रश्न अपडेट कर दिया है। धन्यवाद – ddd

+0

मेरा संपादन जांचें। –

+0

मैंने अब स्ट्रिंग, int और स्ट्रिंग, स्ट्रिंग के रूप में शब्दकोश को आजमाया है।इस पोस्ट को बदल दिया है कि आप इसे कैसे सूचीबद्ध करते हैं और यह अभी भी कोई मान नहीं दिखाता है। अब तक की गई सहायता के लिए धन्यवाद। मुझे वास्तव में यह नहीं पता कि यह काम कैसे प्राप्त करें – ddd

1

क्लाइंट (जावास्क्रिप्ट):

var dict = new Object(); 
dict.Key1 = "Value1" 
dict.Key2 = "Value2" 

$.post('/YourController/YourAction/', dict); 

नोट:

अपना पोस्ट करें "शब्दावली" वस्तुओं अपनी कार्रवाई करने के लिए भेजे जाने से पहले पर्दे के पीछे धारावाहिक हो जाता है।

सर्वर:

public ActionResult YourAction() 
{ 
    string postData = string.Empty; 
    using (StreamReader sr = new StreamReader(Request.InputStream)) 
    { 
     postData = sr.ReadToEnd(); 
    }  

    //Load post data into JObject (Newtonsoft.Json) 
    JObject o = JObject.Parse(postData); 

    //Extract each key/val 
    string val1 = (string)o["Key1"]; 

    //Do whatever.... 
} 
+0

क्या आप अनुरोध प्राप्त कर सकते हैं? मैं क्रोम के लिए पोस्टमैन प्लगइन में इसका परीक्षण करना चाहता हूं, इसलिए मुझे अपने पैरामीटर को dict param –

11

जावास्क्रिप्ट वस्तु/शब्दकोश ASP.NET MVC नियंत्रक से कुंजी-मान जोड़ों की एक सूची के रूप में प्रदान किया जाने वाला जब Dictionary<TKey, TValue> की उम्मीद है है। उदाहरण:

आप इस तरह एक शब्दकोश है, तो:

var sourceMapping = { a: 1, b: 1.5, c: null }; 
var SomeMapping = []; 
for (var key in sourceMapping) { 
    if (sourceMapping.hasOwnProperty(key)) { 
     SomeMapping.push({ Key: key, Value: sourceMapping[key] }); 
    } 
} 

मैं अतुल्यकालिक पोस्ट अनुरोध में इस दृष्टिकोण का उपयोग किया है:

public Dictionary<string, decimal?> SomeMapping { get; set; } 

तो आप अपने जावास्क्रिप्ट में कुछ इस तरह उपयोग करने के लिए (jQuery का उपयोग करके भेजा) कि (इस या अपने मामले में महत्वपूर्ण नहीं हो सकता) 'application/json' पड़ा सामग्री प्रकार सेट।

+0

पर पास करने की आवश्यकता है। मैंने सभी को आजमाया। लेकिन केवल आपका समाधान काम किया। तो आप को +1 – Deb

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