問題: ASP.NET MVC 2 $.ajax() 呼び出しを使用して動的に値を設定すると、jqGrid ドロップダウンに予期しない「未定義」値が表示されます。これは、グリッドに返されたデータが不適切にフォーマットされていることが原因です。 jqGrid は、"FE:FedEx; IN:InTime; TN:TNT"
のようなドロップダウン値の特定の形式を想定しています。 データの書式設定に StringBuilder を使用すると、余分な引用符と末尾のセミコロンが発生します。
分析: 最初のアプローチでは、データを返すために ContentResult(sb.ToString())
を使用しました。機能しますが、効率が低く、フォーマット エラーが発生しやすくなります。
解決策: dataUrl
または buildSelect
内で jqGrid の editoptions
プロパティと searchoptions
プロパティを活用すると、よりクリーンで堅牢なソリューションが提供されます。 これにより、手動による文字列の書式設定が不要になります。 dataUrl
はデータ ソースを指定し、buildSelect
は書式設定を処理します。
dataUrl
と 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>
HTTP メソッドの考慮事項:
dataUrl
に対して GET よりも POST リクエストが優先される場合は、サーバー側で Json(allDestinations, JsonRequestBehavior.AllowGet)
を Json(allDestinations)
に置き換え、ajaxSelectOptions: { type: "POST" }
を jqGrid オプションに追加します。
最適化された buildSelect
関数:
提供されている buildSelect
関数は、明確さと効率性を高めるためにわずかに最適化できます (ただし、機能的には元の関数と同様です)。
<code class="language-javascript">buildSelect: function(response) { return (response && response.length) ? response.join(';') : ''; }</code>
この改訂されたアプローチにより、jqGrid ドロップダウンを設定するための、より保守しやすく、エラーが発生しにくい方法が提供されます。
以上がjqGrid への ASP.NET MVC $.post 呼び出しがドロップダウンに未定義の値を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。