MVC、Json、jQueryなどがどのように動作するのか、私はむしろ新しくなっていますので、ご了承ください。私は過去5年間Webフォームを行ってきました...Response.StatusDescriptionがJsonResultからjQueryに送信されていない
私はフォームデータをサーバーに投稿するためにJsonResultメソッドを使用するModalポップアップ内のフォームの検証に取り組んでいます。 I wish私は、そのポップアップでパーシャルビューをロードして終了することもできましたが、これはオプションではありません。
とにかく、私は昨日働いていたコードをいくつか持っていますが、Gitを使ってプル/プッシュした後、私の検証で何か問題が起こりました。私はサーバーに何かを渡す前に、通常のJavaScriptを使っていくつかの基本的な検証を行いますが(必須のフィールド、正しいデータ型など)、ユーザーが入力する名前を確実にするなどいくつかのことは、ビジネスロジックに
jQueryにAJAXリクエストのJsonResultからのエラーを認識させたい場合は、誤った性質のHTTPステータスコードを送信する必要があることを発見しました。私はそれが400年代と500年代のどの数字でもよいと確信しています。それはうまくいくはずです。
私が行うことは、Response.StatusCode
とResponse.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);
}
});
昨日私が言及したように、これは、入力された名前が存在した場合に固有のものではないことをユーザーに伝える良いメッセージを表示していました。さて、私が得ているのは、「内部サーバーエラー」というメッセージです...これは正解です。ステータスコードを設定したときに私が送信しているものです。しかし、私が言及したように、私は一緒に送信するカスタムステータス説明を見ていません。
これは問題があるかどうかを確認するために未使用のステータスコードに設定してみましたが、表示するテキストがわからないため何も表示されません。
誰が知っていますか?たぶん私のコードに間違ったことがあるかもしれません。ほとんどの場合、他の場所で行われた変更だった可能性があります、私は分かりません。誰かが間違っている可能性について何か考えを持っていますか?
さらにコードが必要な場合は、それを提供しようとします。
ありがとうございます!あなたのエラーコールバックで
あなたが知っている、これは実際には...かもしれませんが、私はこれをテストできるかどうかわかりません。うーん...テスト可能なソリューション。そして私はxhr.StatusTextに...同じ結果を与えました。私はその解決法をいくつかの場所で見た。私はそれを試したことに言及すべきだったと思います。 – user1059903
IISのフルインストールにアクセスできない場合は、IIS Expressを試してみてください。 http://www.microsoft.com/web/gallery/install.aspx?appid=IISExpress –
はい、それでした。ローカルのVS Webサーバーはカスタムステータスの説明が気に入らないようです。今の魅力のように動作します!ありがとう! – user1059903