Response.StatusDescription не отправляется из JsonResult в jQuery

Имейте в виду, что я новичок в том, как MVC, Json, jQuery и т. д. работает, так что потерпите меня. Я занимаюсь веб-формами последние 5 лет ...

Я работаю над проверкой формы в модальном всплывающем окне, которое использует метод JsonResult для отправки данных формы на сервер. Я хотел бы просто загрузить частичное представление в это всплывающее окно и покончить с ним, но это не вариант.

Как бы то ни было, у меня есть код, который вчера работал, но после того, как я сделал pull / push с 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

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

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

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

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

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

Спасибо!

6
задан user1059903 16 December 2011 в 16:33
поделиться