2012-02-11 45 views
2

我試圖通過調用ajax webmethod(asp.net)來編輯jqgrid表單中的選擇元素。jqgrid表單編輯editoptions選擇ajax添加參數

如果我調用一個沒有參數的方法,Everythings很好用。

這是代碼的摘錄:

ajaxSelectOptions: { type: "POST", contentType: 'application/json; charset=utf-8', }, 
colNames: ['City', 'State'], 
colModel: [ 
{ 
    name: 'City', 
    index: 'City', 
    align: "center", 
    width: 80, 
    searchoptions: { sopt: ['eq', 'ne', 'cn']} , 
    edittype: 'select', 
    editable: true, 
    editrules: { required: true }, 
    editoptions: { 
     dataUrl: '<%# ResolveUrl("~/Service/Domain/ServiceGeographic.asmx/GetCityByState") %>', 
     buildSelect: function (data) { 
     var retValue = $.parseJSON(data); 
     var response = $.parseJSON(retValue.d); 

     var s = '<select id="customer_City" name="customer_City">'; 

     if (response && response.length) { 
      for (var i = 0, l = response.length; i < l; i++) { 
      s += '<option value="' + response[i]["Id"] + '">' + response[i]["Descrizione"] + '</option>'; 
      } 
     } 

     return s + "</select>"; 
     }       
    } 
}, 
... 

我在哪裏可以設置發送到GetCityByState的webmethod的參數,如果我嘗試調用一個WebMethod期待一個字符串參數它不工作?

編輯:我沒有強調我使用POST來調用webmethod。即使我試圖爲Oleg suggested on this link,它不工作:(

回答

2

我認爲你需要的jqGrid的ajaxSelectOptions參數。例如,如果你需要有選擇行的id爲發送到WEBMETHOD通過標識的附加id參數因爲在dataType: "json"使用,則應該從

0123修改的 buildSelect第一行中的參數上面的代碼

ajaxSelectOptions: { 
    type: "GET", // one need allows GET in the webmethod (UseHttpGet = true) 
    contentType: 'application/json; charset=utf-8', 
    dataType: "json", 
    cache: false, 
    data: { 
     id: function() { 
      return JSON.stringify($("#list").jqGrid('getGridParam', 'selrow')); 
     } 
    } 
} 

dataUrl可以在函數形式使用的ajaxSelectOptionsdata參數

buildSelect: function (data) { 
    var response = $.parseJSON(data.d); 
    ... 

而且,由於您使用行$.parseJSON(data.d)我可以假設你將WebMethod以錯誤的方式返回數據。通常webmethod的返回值類型應爲類別。您不應該包含任何對返回對象進行手動序列化的調用。而不是有些人誤解,並宣佈string作爲網絡方法的返回類型。他們通過撥打DataContractJsonSerializerJavaScriptSerializer手動進行JSON序列化。結果手動序列化的數據返回字符串將再次被序列化。這就是爲什麼你可以有兩個調用$.parseJSONvar retValue = $.parseJSON(data); var response = $.parseJSON(retValue.d);。如果你要使用dataType: "json"ajaxSelectOptions裏面,如果你在Web方法做無需手動序列化到JSON,只是rejurn對象喜歡它是,你需要有沒有通話$.parseJSON可言。你可以直接使用data.d

buildSelect: function (data) { 
    var response = data.d; 
    ... 
+0

THX奧列格,我應該通過計算器發送UA禮物,最後幾天的答案;)無論如何,首先你應該使用:數據後(對於誰可以從這個優勢用戶話題)。錯誤改變了,它變成了「無效的json基元」。我解決這個[這次靜態]方式的數據:「{'selectedValue':'value'}」 – frabiacca 2012-02-11 13:56:08

+1

@frabiacca:我仔細讀了你寫的關於錯誤的內容。我認爲我的建議應該更正爲使用'JSON.stringify()'。如果你在'ajaxSelectOptions'裏面使用'type:「POST」',那麼你必須使用'data:JSON.stringify({selectedValue:'value'})''。它不舒服,因爲你不能使用功能。如果你要在webmethod中使用和使用'UseHttpGet = true'選項,你將能夠以'data:{selectedValue:function(){return JSON.stringify($(「#list」) .jqGrid('getGridParam','selrow')); }' – Oleg 2012-02-11 14:13:21

+0

@Oleg我可以直接綁定''string to column without ajax call。 – 2016-12-14 04:11:56

相關問題