2012-07-20 18 views
6

से एक स्ट्रिंग सरणी बाध्यकारी पैरामीटर string[] orderTypeNames शून्य हो रहा है।एमवीसी मॉडल jQuery पोस्ट

MVC कार्रवाई

public PartialViewResult EditMultipleOrderStates(
    string[] orderTypeNames, 
    int[] orderIds) 

जावास्क्रिप्ट

$('#edit-mulitple-order-states-button').click(function() { 
    ids = []; 
    types = []; 
    $checked = $('.order-queue-order input:checked'); 
    $orders = $checked.closest('.order-queue-order'); 
    $orders.each(function (index, elem) { 
     $order = $(elem); 
     ids.push($order.attr("orderId")); 
     types.push($order.attr("orderType")); 
    }); 
    data = { 
     orderIds: ids, 
     orderTypeNames: types 
    }; 
    $.post('EditMultipleOrderStates', data, function (response) { 
     //... 
    }); 
}); 

Fiddler

enter image description here

orderIds%5B%5D=97&orderIds%5B%5D=98&orderIds%5B%5D=93&orderTypeNames%5B%5D=DeliveryOrder&orderTypeNames%5B%5D=DeliveryOrder&orderTypeNames%5B%5D=DeliveryOrder 

क्या यह स्क्वायर ब्रैकेट समस्या पैदा कर रहा है? मैं इन सरणी से कैसे बांध सकता हूं?

संपादित करें: मैं मैन्युअल रूप से क्वेरी स्ट्रिंग को औसत समय में बना रहा हूं।

query = ""; 
for each... 
query += "orderIds=" + $order.attr("orderId") + "&"; 
query += "orderTypeNames=" + $order.attr("orderType") + "&"; 
+1

यहां पोस्ट किए गए समाधान का उपयोग करें। http://stackoverflow.com/questions/4402036/jquery-ajax-posting-array-to-asp-net-mvc-controller – BradLaney

उत्तर

0

यहां एक पोस्ट के माध्यम से एकाधिक पैरामीटर पास करने के बारे में एक अच्छा लेख है।

POST Multiple parameters

यह WebAPI बारे में बात कर, लेकिन अभी भी इस मामले में प्रासंगिक है।

+0

मैं वहाँ में समूह के बारे में कुछ भी नहीं देखा। शायद मैं मैन्युअल रूप से एक स्ट्रिंग का निर्माण करूंगा जो एमवीसी समझता है। – Benjamin

3

आप डेटा पर JSON.stringify किसी प्रकार का कॉल करने के लिए की जरूरत है।

$.post('EditMultipleOrderStates', JSON.stringify(data), function (response) { 
     //... 
    }); 
+0

यह अभी भी बाध्यकारी नहीं है। यह '{" ऑर्डर आईडी "उत्पन्न करता है: [" 9 7 "," 98 "," 99 "]," ऑर्डर टाइप नाम ": [" डिलिवरी ऑर्डर "," डिलिवरी ऑर्डर "," डिलिवरी ऑर्डर "]}। क्या एमवीसी एक्शन पैरामीटर में मुझे कुछ बदलना चाहिए? – Benjamin

1

@ बेंजामिन। यहाँ मैं क्या किया है के एक अधिक विस्तृत उदाहरण का एक सा है कि काम करता है

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#btnTest').click(function() { 

      var filter = { 
       OrgId: 3, 
       Drivers: [{ Name: "SGT-200" }, { Name: "SGT-100"}], 
       DrivenUnits: [{ Name: "Generator" }], 
       Regions: [{ Name: "REU" }], 
       SearchString : "Test search string" 
      }; 

      $.ajax(
       { 
        url: "/api/Dashboard/PostFilter", 
        type: "POST", 
        contentType: "application/json", 
        dataType: "json", 
        data: JSON.stringify(filter), 
        success: function(result) { 
         alert(result); 
        }, 
        error: function(error) { 

         alert("There was an error posting the data to the server: " + error.responseText); 

        } 
       }); 
     }); 
    }); 
</script> 

आशा इस मदद करता है।

संपादित करें: और यहां मिलान सी # वस्तुओं

public class Filter 
{ 
    public int OrgId { get; set; } 
    public List<FilterData> Drivers { get; set; } 
    public List<FilterData> DrivenUnits { get; set; } 
    public List<FilterData> Regions { get; set; } 
    public List<FilterData> Operations { get; set; } 
    public List<FilterData> Connections { get; set; } 
    public string SearchString { get; set; } 
} 

public class FilterData 
{ 
    public string Type { get; set; } 
    public string Name { get; set; } 
    public int Count { get; set; } 
} 

सभी प्रकार नाम से मेल करने की जरूरत है। और नीचे वह कोड है जो कॉल

public IQueryable<DashboardData> Post(Filter filter) { 
     using(_unitOfWork) 
     { 
      _dashboardRepository.UsingUnitOfWork(_unitOfWork); 

      return FilterDashboardData(_dashboardRepository.GetDashboardData(filter.OrgId), filter); 
     } 
    } 
+0

धन्यवाद। ऐसा लगता है कि स्कोटम की तरह अनुशंसित कॉलिंग के परिणाम के समान कुछ हद तक दिखता है। ऐसा लगता है कि एमवीसी जेसन से बांधना नहीं चाहता था। क्या जेएसन सरणी से जुड़ने के लिए नियंत्रक में कुछ ऐसा किया जाना है? – Benjamin

+0

@ बेंजामिन। मैंने इस कोड का उपयोग किया है, जैसा कि यह है, और कुछ बदलावों के साथ, क्रॉस-डोमेन, और इसमें कोई समस्या नहीं है। मामले में मेरे पास उपयुक्त गुणों के साथ एक सी # फ़िल्टर ऑब्जेक्ट होगा। मैं सी # कक्षा जोड़ूंगा ताकि आप देख सकें कि क्या होता है।यदि आपका मैपिंग काम नहीं कर रहा है, तो आपके ऑब्जेक्ट क्लास में कुछ गलत है, डेटाटाइप/नाम – stevethethread

+0

के संबंध में यह डिफ़ॉल्ट एएसपीएनटी एमवीसी मॉडल बाइंडिंग की तुलना में थोड़ा जटिल लगता है। – Benjamin

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