ホームページ >バックエンド開発 >C++ >ASP.NET MVC jqGrid ドロップダウンに「未定義」値が表示されるのはなぜですか?

ASP.NET MVC jqGrid ドロップダウンに「未定義」値が表示されるのはなぜですか?

DDD
DDDオリジナル
2025-01-11 08:45:42966ブラウズ

Why Does My ASP.NET MVC jqGrid Dropdown Show an

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 は独自の引用符を追加するため、引用符が二重になり、「未定義」の問題が発生します。

優れたソリューション: dataUrlbuildSelect

の使用

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" } を追加する必要があります。
  • 新しい jqGrid バージョンでは、buildSelect$.ajax() 成功ハンドラー内で呼び出されるため、jQuery.parseJSON(data.responseText) は不要です。

この改訂されたアプローチは、jqGrid ドロップダウンを管理するための、よりクリーンで効率的でエラーが発生しにくい方法を提供し、「未定義」値の問題を排除します。 /YourController/GetDestinationList をコントローラー アクションへの実際のパスに置き換えることを忘れないでください。

以上がASP.NET MVC jqGrid ドロップダウンに「未定義」値が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。