0

私は asp.net-mvc サイトを持っており、私はjqgridを使用しています。編集コントロールがドロップダウンになっているフィールドがいくつかあります。ドロップダウンが依存する int という名前が別の列に由来するという問題があるため、編集フォームを表示するたびに、または「+」をクリックして新しいエントリを追加するたびに、サーバーから強制的に更新する必要があります正しい文字列が表示されていることを確認してください。

Internet Explorer がドロップダウン リストをキャッシュしないように一生懸命指示しても、ドロップダウン リストがキャッシュされているように見えるという問題が発生しています。Firefox や Chrome ではこの問題は発生しません。

これが私のコードです:

私が問題を観察している Col MODEL 行:

     { name: "SiteSettings", index: "SiteSettings", width: 250, editable: true, 
      edittype: "select", editoptions: { dataUrl: "/SiteSettings/GetSelectData" }, 
      editrules: { edithidden: true, required: false} },

編集ボタンと追加ボタンを作成するコードは次のとおりです。

    onClickButton: function () {
        jQuery("#grid").jqGrid('editGridRow', "new", { recreateForm: true, url: '/MyController/Add', afterSubmit: function (response, postdata) {
            var responseJson = $.parseJSON(response.responseText);
            return HandleJqGridAddResponse(responseJson);
        }, height: 380, width: "auto", closeAfterAdd: true, reloadAfterSubmit: true
        });
    },

        jQuery("#grid").jqGrid('editGridRow', id,
                    { url: '/MyController/Update', afterSubmit: function (response, postdata) {
                        var responseJson = $.parseJSON(response.responseText);
                        return HandleJqGridResponse(responseJson);
                    },
                        height: 380, width: "auto", recreateForm: true, closeAfterEdit: true,
                        closeOnEscape: true, reloadAfterSubmit: true
                    });

と思いました

  recreateForm: true

また

  $("#grid").jqGrid({
     ajaxSelectOptions: { cache: false }
  });

トリックを行いますが、違いはないようです。

しかし、編集フォームまたは新しいフォームを表示すると、ドロップダウンの項目のリストを返すためにバックエンドの関数が呼び出されていないため、クライアント側のキャッシュが必要であることがわかりました。

新しいエントリを編集または追加しようとするたびに、dataurl ( dataUrl: "/SiteSettings/GetSelectData ")を強制的に更新するにはどうすればよいですか?

4

2 に答える 2

1

jQuery.extend(jQuery.jgrid.edit, {recreateForm: true});クライアント側であなたのために働くはずです

サーバー側でもクライアント側でもキャッシュがないようにするには、[OutputCache(NoStore = true)]属性を使用してデータを取得するアクションを装飾できます。

于 2014-09-14T14:48:45.083 に答える
1

dataUrl( )を処理するコードに、サーバー側で対応する HTTP ヘッダーを設定するのがバストな方法だと思います"/SiteSettings/GetSelectData"。私は個人的に行を含めます

HttpContext.Current.Response.Cache.SetMaxAge (new TimeSpan (0));

また

Response.Cache.SetCacheability (HttpCacheability.ServerAndPrivate);
Response.Cache.SetMaxAge (new TimeSpan (0));

GetSelectDataアクションの最初の行/行として。Cache-Control: private, max-age=0ヘッダーを設定し (こちらを参照)、Web ブラウザーまたは Web プロキシーがサーバー応答をキャッシュしないことを確認します。

キャッシュオプションの宣言的な設定を好む場合は、使用できます

[OutputCache(Duration = 0)]

また

[OutputCache(Duration = 0, Location = OutputCacheLocation.Client, VaryByParam = "*")]

どの設定が最適かはわかりませんが、目標はCache-Control: private, max-age=0ヘッダーを設定することです。

于 2014-09-14T17:11:15.870 に答える