0

私は MVC3 アプリケーションを作成しており、ページの 1 つで、ページングと並べ替えを使用してテーブルに表示されるアイテムのリストを取り戻します。

ただし、買い戻されたレコードが一定数を超えた場合は、さらに検索を絞り込むようにユーザーに通知するメッセージを表示したいと考えています。

Response.StatusCode上記の条件が満たされている場合、コントローラーの を変更することでこれを実装しました。

public PartialViewResult VerbatimGridUpdate(VerbatimFormModel model)
{
    if (ModelState.IsValid)
    {
        var mod = ModelBuilder.GetVerbatimFormModel(model);

        if (mod.Verbatims.Count() > 10000)
        {
            HttpContext.Response.StatusCode = 33;
        }

        return PartialView("_VerbatimGrid", mod);
    }
    else
    {
        return PartialView(model.Verbatims); 
    }
}

そして、マークアップでは、Ajax フォームの OnFailure イベントを使用してこの失敗をキャプチャします。

    function FailureLoading(ajaxContext) {
        if (ajaxContext.status == "33") {
            var ul = $("#validationSummary ul");
            $("ul").empty();
            ul.append("<li>" + "Too many records returned, please refine your search." + "</li>");
        }
    }

</script>

<div class="filters" >
    @using (Ajax.BeginForm("VerbatimGridUpdate", null, new AjaxOptions { HttpMethod= "Get", UpdateTargetId = "grid-container",  OnBegin = "StartLoading", OnSuccess = "FinishLoading", OnFailure="FailureLoading"}, new { id = "VerbatimListForm", name="VerbatimListForm" }))
    { 

ローカルではすべて正常に動作しますが、UAT サーバーにデプロイするとすぐに、失敗イベントは発生せず、すべてのレコードが表示されます。なぜ私はこの行動の違いを得ているのか分かりません。どんなアイデアでも大歓迎です。ありがとうございました。

4

2 に答える 2

1

それが正しいかどうかはわかりませんが、その目的でカスタム http ステータス コードを使用するべきではありません。まず第一に、それはエラーではなく、他にもレコード (情報) があることをユーザーに伝えることだけです。

このステータスを示す部分ビューで非表示フィールドを使用し、部分ビューonSuccessから非表示フィールドを読み取り、ステータスに基づいてユーザーに情報を更新する必要がある方法で使用できます。

于 2012-06-11T16:22:15.950 に答える
0

これは多くの理由で発生する可能性があります。いくつかの一般的な理由は次のとおりです。

  • クライアントとサーバー間の異なるドメイン。

デフォルトでは、AJAX 呼び出しはクロスドメイン アクセスを許可しません。この問題の解決策をいくつかここで確認できます。

  • 相対パスと絶対パス。

開発サーバーが のよう http://localhost/myController/myActionになり、UAT が のようになることがありますhttp://myUatserver/myApp/myController/myAction

絶対ルート パスを使用している場合/myController/myAction、ホスト ルートに移動し、URL が見つかりません。にコントローラーとアクションを明示的に含めるようにしてくださいAjax.BeginForm()

Firebug や Chrome の開発ツールなどのデバッガーを使用して Ajax 呼び出しが行われている場所を特定し、XHR 呼び出しを探すことができます。

于 2012-06-11T16:15:47.427 に答える