jqGrid を使用してデータ編集用のドロップダウン メニューを動的に設定すると、追加の「未定義」項目がドロップダウン メニューに表示されます。この問題は、ドロップダウン メニューの値を入力するために使用される文字列形式に起因します。
jqGrid では、ドロップダウン メニューの値の形式を次のようにする必要があります:
<code>value: "FE:FedEx; IN:InTime; TN:TNT"</code>
ただし、ASP.NET MVC アクションのコードは、値の前後に不要な引用符を追加する sb.ToString() を使用して文字列を生成します。
<code>value: ""ID: One;ID: Two;ID: Three;ID: Four;ID: Five;""</code>
方法 1: dataUrl を使用する
この問題を解決するには、jqGrid の editoptions または searchoptions の dataUrl 属性を使用することをお勧めします。これにより、結果を目的の形式で返す URL を指定できます:
<code>{ name: 'destinations', ditable: true, edittype:'select', editoptions: { dataUrl:'<%= Url.Action("GetDestinationList","Home") %>' } }</code>
コントローラーでは、GetDestinationList オペレーションはドロップダウン メニューの値を含む JSON 配列を返す必要があります:
<code>public JsonResult GetDestinationList() { List<string> allDestinations = GetAllDestinations(); Json(allDestinations, JsonRequestBehavior.AllowGet); }</code>
方法 2: buildSelect 関数を使用する
dataUrl が使用できない場合は、buildSelect 関数を使用してドロップダウン メニューの値をフォーマットできます:
<code class="language-javascript"> buildSelect: function(data) { var s = ''; if (response && response.length) { for (var i = 0, l=response.length; i<l ; i++) { var ri = response[i]; s += ''+ri+''; } } return s + ""; }</code>
この関数はサーバーから応答データを受信し、必要な形式の文字列を返します。
以上がASP.NET MVC $.post リクエストが jqGrid ドロップダウンに対して予期せずフォーマットされた文字列を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。