Пожалуйста, имейте в виду, что я довольно плохо знаком с тем, как работают MVC, Json, jQuery и т. Д., Так что терпите меня.Я занимаюсь веб-формами в течение последних 5 лет ...
Я работаю над проверкой формы в модальном всплывающем окне, которое использует метод JsonResult для отправки данных формы на сервер.Я желаю Я мог бы просто загрузить частичное представление в этом всплывающем окне и покончить с этим, но это не вариант.
В любом случае, у меня есть код, который работал вчера, но послеЯ сделал тянуть / толкать с Git, что-то пошло не так с моей проверкой.Я провожу некоторую базовую проверку с помощью обычного JavaScript, прежде чем передать что-либо на сервер (обязательные поля, правильные типы данных и т. Д.), Но некоторые вещи, например, проверка того, что имя, которое вводит пользователь, уникальны, требуют, чтобы я прошел весь путьк бизнес-логике.
Пройдя по Интернету, я обнаружил, что если вы хотите, чтобы jQuery распознал ошибку из JsonResult в запросе AJAX, вы должны отправить 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 Request
$.ajax({
type: 'POST',
data: { ServerName: serverName },
url: getBaseURL() + 'Email_SmtpServer/_QueueCreate/',
success: function (data) { onSuccess(data); },
error: function (xhr, status, error) {
$('#GeneralSMTPServerValidation').html(error);
}
});
Как я уже говорил, вчера пользователю показывалось приятное сообщение, информирующее его о том, что введенное имя не является уникальным, если оно и существует.Теперь все, что я получаю, - это сообщение «Внутренняя ошибка сервера» ... которое является правильным, так как именно это я и отправляю, когда устанавливаю свой код состояния.Однако, как я уже упоминал, он больше не видит пользовательское описание состояния, которое я отправляю.
Я также попытался установить для него какой-то неиспользуемый код состояния, чтобы увидеть, была ли это проблема, но это просто ничего не показывает, потому чтоон не знает, какой текст показывать.
Кто знает?Может быть, сейчас что-то не так с моим кодом.Скорее всего, это было изменение, сделанное где-то еще, что бы это могло быть, я понятия не имею.У кого-нибудь есть идеи о том, что может пойти не так?
Если вам понадобится больше кода, я постараюсь предоставить его.
Спасибо!