3

これは一種の奇妙な質問ですが、私は非常に奇妙な状況に陥っています。私の開発サーバー (IIS & IIS Express) で ajax リクエストを行い、フォームを返します。次に、ユーザーは ajax ポストを介してフォームをポストし、検証エラーがある場合、コントローラーは応答コード 400 で部分ビューを返します。私の ajax メソッドでは、400 エラーをインターセプトし、検証エラーのあるフォームを再表示します。

私の問題は、アプリを実稼働サーバーにアップロードすると、検証エラーが表示され、部分ビューのない 400 応答だけになることです。どこから始めればいいのかわからない?これが私が試したこと、使用しているライブラリ、およびいくつかのサンプルコードです。

ASP.net MVC4、流暢な検証、jQuery、目立たない検証、malsup-ajaxsubmit

私の本番サーバーでは...

  1. フォームをロードする部分ビューは期待どおりに機能します。これは、検証が失敗した場合に同じビューが再表示されるため、アプリケーションがビューを見つけるのに問題がないことを示しています。
  2. 流暢な検証を使用しているコントローラーは、モデル状態エラーを正しく検出し、400 で応答しています (ビューが表示されないだけです)。
  3. ajaxsubmit を使用した ajax 投稿は、ajax を使用して正しくサーバーに投稿しています。
  4. firebug を使用して ajax メソッドを実行すると、実際には 400 エラーが返されますが、xhr.responseText のコンテンツは「Bad Request」だけです。部分的なビューはありません。ここでも、私の開発マシンは完璧に動作します。

ここにいくつかのコードがあります。

私のフォーム取得リクエスト:

public ActionResult CreateMedicalEvent(int userId)
{
    var model = new EventModel { MedicalEventUserId = userId };

    return PartialView("_Event.Create", model);
}

私のフォーム投稿:

[HttpPost]
        public ActionResult CreateMedicalEvent(EventModel model)
        {
            if (!ModelState.IsValid)
            {
                Response.StatusCode = 400;
                return PartialView("_Event.Create", model);//this does not get returned on production server
            }

            //the rest of my code if validation passess
        }

私のajaxメソッド:

 $('.se-form').ajaxForm({
        delegation: true,
        beforeSubmit: function() {
            ajaxHelpers.modalProcess();//modal progress bar
        },
        success: function(data) {
            $.modal.close();
            //handle a successful post
        },
        error: function(xhr) {
            $.modal.close();
            if (xhr.status == 400) {
                slideEdit.seObj.empty();//this is my form object
                slideEdit.seObj.append(xhr.responseText);//all I get is "Bad Request" from production server
                $.validator.unobtrusive.parse($('form', slideEdit.seObj));
                ajaxHelpers.bindDates(); //because we need to bind event AND format date, we have to do this here
                utilities.formatDecimal();
            } else {
                ajaxHelpers.exc(xhr);
            }
        }
    });

投稿するコードがもっとあればいいのにと思いますが、それほど複雑ではありません。運用サーバーに奇妙な dll ファイルがありませんか? どちらのサーバーにも MVC4 がインストールされています。失った。助けてください。ありがとう。

4

3 に答える 3

4

A400は不正な要求を示します。つまり、MVC は、送信された要求を処理できないと判断しました。この場合、コントローラー アクションは呼び出されません。詳細なエラー出力を有効にするか、Visual Studio でサイトに対して要求を実行して、例外の詳細を取得できるかどうかを確認してください。ルーティング、コントローラーの構築、アクションの呼び出し、またはモデル バインディングで発生する可能性があります。

于 2013-08-29T17:23:33.370 に答える
-1

私の場合、誤ってPartialView.cshtmlファイルを間違った View ディレクトリに置いてしまいました。それを正しいViewディレクトリに移動し、400悪いリクエストはもうありません。どっ!

于 2015-01-07T02:45:04.133 に答える