2010-01-04 136 views
15

我想通過一個Ajax文章傳遞給我的控制器類型<int,int>字典。 這裏的主要原因是後可以在這裏1-3之間的鍵值對(沒有這些值在編譯時就知道),並在未來可能上升到5傳遞字典到控制器asp.net mvc

另外,在文章中,我有以傳遞一些其他數據,如Id和名稱,這些數據都是正常的。

我將如何在javascript中構造這個詞典然後通過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

喜歡的東西(JavaScript)的

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 2010-01-04 17:19:43

+0

檢查我的編輯。 – 2010-01-04 18:55:46

+0

我現在已經嘗試字典作爲字符串,整數和字符串,字符串。將帖子更改爲如何列出,但仍不顯示任何值。感謝你目前的幫助。我真的不知道如何才能正常工作 – ddd 2010-01-04 18:55:53

1

客戶端(JavaScript的):

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

你能寫出獲取請求嗎?我想在PostMan插件中測試它的鉻版,所以我需要將我的參數傳遞給字典參數 – 2017-06-15 13:54:44

11

JavaScript對象/詞典有當Dictionary<TKey, TValue>有望被作爲鍵值對到ASP.NET MVC控制器列表過去了。例如:

如果你有這樣的詞典:

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

,那麼你必須使用類似這樣在你的JavaScript:

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] }); 
    } 
} 

我用異步POST請求這種方法(使用jQuery發送)的內容類型設置爲'application/json'(這可能或可能不重要)。

+0

我試過了。但只有你的解決方案奏效。所以+1給你 – Deb 2015-07-12 07:26:31

相關問題