Response.StatusDescription не отправляется из JsonResult в jQuery - PullRequest
6 голосов
/ 16 декабря 2011

Пожалуйста, имейте в виду, что я довольно плохо знаком с тем, как работают 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);
            }
        });

Как я уже говорил, вчера пользователю показывалось приятное сообщение, информирующее его о том, что введенное имя не является уникальным, если оно и существует.Теперь все, что я получаю, - это сообщение «Внутренняя ошибка сервера» ... которое является правильным, так как именно это я и отправляю, когда устанавливаю свой код состояния.Однако, как я уже упоминал, он больше не видит пользовательское описание состояния, которое я отправляю.

Я также попытался установить для него какой-то неиспользуемый код состояния, чтобы увидеть, была ли это проблема, но это просто ничего не показывает, потому чтоон не знает, какой текст показывать.

Кто знает?Может быть, сейчас что-то не так с моим кодом.Скорее всего, это было изменение, сделанное где-то еще, что бы это могло быть, я понятия не имею.У кого-нибудь есть идеи о том, что может пойти не так?

Если вам понадобится больше кода, я постараюсь предоставить его.

Спасибо!

1 Ответ

10 голосов
/ 16 декабря 2011

В вашем сообщении об ошибке попробуйте использовать

xhr.statusText

Кроме того, если вы используете веб-сервер Visual Studio, вы можете не получить обратно текст состояния. http://forums.asp.net/post/4180034.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...