2011-12-16 16 views
6

MVC、Json、jQueryなどがどのように動作するのか、私はむしろ新しくなっていますので、ご了承ください。私は過去5年間Webフォームを行ってきました...Response.StatusDescriptionがJsonResultからjQueryに送信されていない

私はフォームデータをサーバーに投稿するためにJsonResultメソッドを使用するModalポップアップ内のフォームの検証に取り組んでいます。 I wish私は、そのポップアップでパーシャルビューをロードして終了することもできましたが、これはオプションではありません。

とにかく、私は昨日働いていたコードをいくつか持っていますが、Gitを使ってプル/プッシュした後、私の検証で何か問題が起こりました。私はサーバーに何かを渡す前に、通常のJavaScriptを使っていくつかの基本的な検証を行いますが(必須のフィールド、正しいデータ型など)、ユーザーが入力する名前を確実にするなどいくつかのことは、ビジネスロジックに

jQueryにAJAXリクエストのJsonResultからのエラーを認識させたい場合は、誤った性質のHTTPステータスコードを送信する必要があることを発見しました。私はそれが400年代と500年代のどの数字でもよいと確信しています。それはうまくいくはずです。

私が行うことは、Response.StatusCodeResponse.StatusDescriptionを使用してステータスコードとステータスの説明を設定してから、モデルを返すことです。 jQueryはエラーを認識し、ステータス記述に設定したエラーメッセージを表示します。それはすごくうまくいった。

今日、私のコントローラ内のJsonResultからjQueryへの唯一のことは、ステータスコードです。私はC#をトレースして、すべてが正しく設定されているようですが、私は設定したカスタムステータス説明を抽出できないようです。

モーダルポップアップ

<fieldset id="SmtpServer_QueueCreate_Div"> 
    @Form.HiddenID("SMTPServerId") 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.ServerName) 
     <br /> 
     <input type="text" class="textfield wide-box" id="ServerName" name="ServerName" title="The display name of the Server" /> 
     <br /> 
     <span id="ServerNameValidation" style="color:Red;" /> 
    </div> 
    <div class="editor-label"> 
     <span id="GeneralSMTPServerValidation" style="color:Red;" /> 
    </div> 
    <br /> 
    <p> 
     <button type="submit" class="button2" onclick="onEmail_SmtpServerQueueCreateSubmit();"> 
     Create SMTP Server</button> 
     <input id="btnCancelEmail_SmtpServerQueueCreate" type="button" value="Cancel" class="button" 
     onclick="Email_SmtpServerQueueCreateClose();" /> 
    </p> 
</fieldset> 

コントローラ

[HttpPost] 
     public virtual JsonResult _QueueCreate(string serverName) 
     { 
      Email_SmtpServerModel model = new Email_SmtpServerModel(); 
      string errorMessage = ""; 
      try 
      { 
       Email_SmtpServer dbESS = new Email_SmtpServer(ConnectionString); 
       model.SMTPServerId = System.Guid.NewGuid(); 
       model.ServerName = serverName; 
       if (!dbESS.UniqueInsert(model, out errorMessage)) 
       { 
        return Json(model); 
       } 
      } 
      catch (Exception ex) 
      { 
       errorMessage = ex.Message; 
      } 
      Response.StatusCode = 500; 
      Response.StatusDescription = errorMessage; 

      return Json(model); 
     } 

jQueryのAjaxリクエスト

0123:ここ

は、私が持っているコードです。

$.ajax({ 
      type: 'POST', 
      data: { ServerName: serverName }, 
      url: getBaseURL() + 'Email_SmtpServer/_QueueCreate/', 
      success: function (data) { onSuccess(data); }, 
      error: function (xhr, status, error) { 
       $('#GeneralSMTPServerValidation').html(error); 
      } 
     }); 

昨日私が言及したように、これは、入力された名前が存在した場合に固有のものではないことをユーザーに伝える良いメッセージを表示していました。さて、私が得ているのは、「内部サーバーエラー」というメッセージです...これは正解です。ステータスコードを設定したときに私が送信しているものです。しかし、私が言及したように、私は一緒に送信するカスタムステータス説明を見ていません。

これは問題があるかどうかを確認するために未使用のステータスコードに設定してみましたが、表示するテキストがわからないため何も表示されません。

誰が知っていますか?たぶん私のコードに間違ったことがあるかもしれません。ほとんどの場合、他の場所で行われた変更だった可能性があります、私は分かりません。誰かが間違っている可能性について何か考えを持っていますか?

さらにコードが必要な場合は、それを提供しようとします。

ありがとうございます!あなたのエラーコールバックで

答えて

10

、あなたは、Visual StudioのWebサーバを使用している場合、また

xhr.statusText 

を使用してみてください、あなたはステータステキストを取り戻すないかもしれません。 http://forums.asp.net/post/4180034.aspx

+0

あなたが知っている、これは実際には...かもしれませんが、私はこれをテストできるかどうかわかりません。うーん...テスト可能なソリューション。そして私はxhr.StatusTextに...同じ結果を与えました。私はその解決法をいくつかの場所で見た。私はそれを試したことに言及すべきだったと思います。 – user1059903

+1

IISのフルインストールにアクセスできない場合は、IIS Expressを試してみてください。 http://www.microsoft.com/web/gallery/install.aspx?appid=IISExpress –

+1

はい、それでした。ローカルのVS Webサーバーはカスタムステータスの説明が気に入らないようです。今の魅力のように動作します!ありがとう! – user1059903

関連する問題