Браузер хочет загрузить Json как файл при возврате Json из контроллера - PullRequest
2 голосов
/ 16 мая 2011
  $("#frmCompose").submit(function () {

            $(this).ajaxSubmit({

                success: function (response) {
                    alert('success');
                }
            });

        });

Код контроллера:

 [HttpPost]
        public ActionResult SendEmail(EmailMessageModel emailMessage)
        {
            try
            {
                // do something with the data
                return Json(new StatusModel { error = false });
            }
            catch (Exception)
            {
                return Json(new StatusModel { error = true, message = "Could not send email" });
            }
        }

Посмотреть код:

<form id="frmCompose" method="post" action="SendEmail">
    <button id="compose" class="btn-pencil">
        Send</button>
    <div class="fields-inline">
        <div class="editor-label">
            @Html.Label("To:")
        </div>
        @Html.TextBox("txtTo")
    </div>
    <div class="fields-inline">
        <div class="editor-label">
            @Html.Label("Subject:")
        </div>
        @Html.TextBox("txtSubject")
    </div>
    <div class="fields-inline">
        <div class="editor-label">
            @Html.Label("Body:")
        </div>
        @Html.TextArea("txtBody")
    </div>
</form>

В моем контроллере я возвращаю результат JSon с текстовым сообщением. Почему представление в FireFox хочет загрузить json как файл?

Все, что я хочу сделать, это убедиться, что я получил ответ в случае успешного обратного вызова

Ответы [ 2 ]

3 голосов
/ 16 мая 2011

Решение состоит в том, чтобы возвращать false в функции вызова submit () для формы.

Таким образом, результат json используется внутри функции submit и не передается в браузер для обработки.

$("#frmCompose").submit(function () {

            // submit data to server here....


            return false;
        });
0 голосов
/ 16 мая 2011

Согласно документации :

Поскольку невозможно загружать файлы с помощью объекта браузера XMLHttpRequest, плагин формы использует скрытый элемент iframe, чтобы помочь с задачей,Это обычная техника, но она имеет свои ограничения.Элемент iframe используется в качестве цели операции отправки формы, что означает, что ответ сервера записывается в iframe.Это нормально, если тип ответа - HTML или XML, но не работает так же хорошо, если тип ответа - сценарий или JSON, оба из которых часто содержат символы, которые должны быть представлены с использованием ссылок на сущности при обнаружении в разметке HTML.

Чтобы учесть проблемы ответов сценариев и JSON, плагин формы позволяет встраивать эти ответы в элемент textarea, и рекомендуется делать это для этих типов ответов при использовании в сочетании с загрузкой файлов.

Это в основном означает, что если вы хотите загружать файлы с помощью плагина формы jquery, а ваша форма содержит поля ввода файлов, серверу необходимо заключить возвращенный JSON в теги <textarea>.

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