ASP.NET MVC jqGrid ドロップダウンの「未定義」値を解決する
データ編集中に jqGrid ドロップダウンを動的に設定すると、不要な「未定義」値が頻繁に表示されます。これは、jqGrid が期待するデータ構造とデータ配信方法の間の不一致に起因します。
正しい jqGrid データ形式:
ドロップダウンの値の理想的な形式は次のとおりです: value: "FE:FedEx; IN:InTime; TN:TNT"
現在のメソッドの問題:
現在のアプローチでは、ASP.NET MVC と jQuery の $.ajax()
を使用してドロップダウン データを取得します。 StringBuilder
は取得したデータを操作して jqGrid の形式に一致させますが、余分な「未定義」エントリが残ります。
デバッグ結果:
FireBug のデバッグでは、sb.ToString()
によって導入された余分な引用符が原因であることが示されています。 jqGrid は独自の引用符を追加するため、引用符が二重になり、「未定義」の問題が発生します。
優れたソリューション: dataUrl
と buildSelect
value
プロパティを直接操作する代わりに、より堅牢なソリューションには、dataUrl
または buildSelect
内で jqGrid の editoptions
プロパティと searchoptions
プロパティを使用することが含まれます。 これらにより、カスタマイズされたデータの取得とフォーマットが可能になります。
例 dataUrl
アクション:
<code class="language-csharp">public JsonResult GetDestinationList() { List<string> allDestinations = GetAllDestinations(); return Json(allDestinations, JsonRequestBehavior.AllowGet); }</code>
例 buildSelect
関数:
<code class="language-javascript">buildSelect: function(data) { var s = ''; if (data && data.length) { for (var i = 0, l = data.length; i < l; i++) { s += data[i] + ';'; // Assuming data[i] is already in "key:value" format } return s.substring(0, s.length - 1); // Remove trailing semicolon } return s; }</code>
更新済み editoptions
:
<code class="language-javascript">{ name: 'destinations', editable: true, edittype: 'select', editoptions: { dataUrl: '/YourController/GetDestinationList', // Replace with your controller action path buildSelect: function(data) { // ... (buildSelect function from above) ... } } }</code>
重要な注意事項:
Json(allDestinations);
なしで JsonRequestBehavior.AllowGet
を使用することもできますが、jqGrid オプションに ajaxSelectOptions: { type: "POST" }
を追加する必要があります。buildSelect
は $.ajax()
成功ハンドラー内で呼び出されるため、jQuery.parseJSON(data.responseText)
は不要です。この改訂されたアプローチは、jqGrid ドロップダウンを管理するための、よりクリーンで効率的でエラーが発生しにくい方法を提供し、「未定義」値の問題を排除します。 /YourController/GetDestinationList
をコントローラー アクションへの実際のパスに置き換えることを忘れないでください。
以上がASP.NET MVC jqGrid ドロップダウンに「未定義」値が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。