Rumah >pembangunan bahagian belakang >C++ >Mengapakah ASP.NET MVC $.post Panggilan ke jqGrid saya Mengembalikan Nilai Tidak Ditakrifkan dalam Dropdown?
Masalahnya: Nilai "undefined" yang tidak dijangka muncul dalam lungsur jqGrid apabila diisi secara dinamik menggunakan panggilan $.ajax() ASP.NET MVC 2. Ini berpunca daripada data yang tidak diformatkan dengan betul yang dikembalikan ke grid. JqGrid menjangkakan format khusus untuk nilai lungsur turun, seperti: "FE:FedEx; IN:InTime; TN:TNT"
. Menggunakan StringBuilder untuk pemformatan data menghasilkan petikan tambahan dan koma bertitik di belakang.
Analisis: Pendekatan awal menggunakan ContentResult(sb.ToString())
untuk mengembalikan data. Walaupun berfungsi, ia kurang cekap dan terdedah kepada ralat pemformatan.
Penyelesaian: Memanfaatkan ciri dataUrl
dan buildSelect
jqGrid dalam editoptions
atau searchoptions
menawarkan penyelesaian yang lebih bersih, lebih mantap. Ini menghapuskan pemformatan rentetan manual. dataUrl
menentukan sumber data dan buildSelect
mengendalikan pemformatan.
Contoh menggunakan dataUrl
dan buildSelect
:
<code class="language-javascript">{ name: 'destinations', editable: true, edittype: 'select', editoptions: { dataUrl: '<%= Url.Action("GetDestinationList", "Home") %>', buildSelect: function(response) { var s = ''; if (response && response.length) { for (var i = 0; i < response.length; i++) { s += response[i] + ';'; //Note the semicolon placement } } return s; // Removed trailing "" } } }</code>
Pertimbangan Kaedah HTTP:
Jika permintaan POST diutamakan daripada GET untuk dataUrl
, gantikan Json(allDestinations, JsonRequestBehavior.AllowGet)
dengan Json(allDestinations)
pada bahagian pelayan dan tambahkan ajaxSelectOptions: { type: "POST" }
pada pilihan jqGrid.
Dioptimumkan buildSelect
Fungsi:
Fungsi buildSelect
yang disediakan boleh dioptimumkan sedikit untuk kejelasan dan kecekapan (walaupun fungsinya serupa dengan yang asal):
<code class="language-javascript">buildSelect: function(response) { return (response && response.length) ? response.join(';') : ''; }</code>
Pendekatan yang disemak ini menyediakan kaedah yang lebih mudah diselenggara dan kurang ralat untuk mengisi menu lungsur jqGrid.
Atas ialah kandungan terperinci Mengapakah ASP.NET MVC $.post Panggilan ke jqGrid saya Mengembalikan Nilai Tidak Ditakrifkan dalam Dropdown?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!