mvc3 json результат, возвращающий файл - PullRequest
0 голосов
/ 26 июля 2011

Вот моя ситуация: у меня есть диалоговая форма, которая вставляет некоторые данные в мою базу данных. После того, как все проверено, информация формы превращается в объект базы данных (я использую linq to sql) и отправляется. Поскольку я делаю это, используя jquery ajax, у меня есть функция успеха, которая отображает некоторое сообщение пользователю (просто чтобы сообщить ему, что его действие было успешным), закрывает мой диалог и обновляет мою главную страницу. И это проблема, ни одно из успешных действий не происходит из-за какого-то странного окна загрузки, которое появляется, спрашивая меня, хочу ли я загрузить действие моего контроллера (вы увидите мой код).

Вот сокращенный код:

Функция отправки JQuery

     //Submete a nova solicitão ao servidor e atualiza a página em caso de sucesso
            $("#novaSIForm").submit(function (e) {
                e.preventDefault();
                $.ajax({
                    type: "Post",
                    url: $(this).attr("action"),
                    cache: false,
                    data: $(this).serialize(),
                    success: function (data) {
                        //Fecha a modal
                        $("#novaSIModal").dialog("close");
                        //Após a requisição ter sucesso, atualiza a página
                        $("#SiContainer").load('@Url.Action("SolicitacoesInternas")');

                        alert(data.msg);
                    },
error: function (jqr, errorStatus, errorThrow) {
                    alert("Erro ocorrido " + errorStatus);
                }
                });

                return false; //Isso faz com o que o form não execute sua ACTION
            });

АКЦИЯ

public ActionResult SiNovaSI(ChamadoViewModel chVM, string tituloChamado)
        {
            try
            {
                CHAMADO ch = new CHAMADO();

                ch.InjectFrom(chVM);//Injeta os valores da ViewModel no novo Chamado criado
                //Seta outras propriedades que não foram injetadas anteriormente
                ch.DATAINICIO = DateTime.Now;
                ch.SOLICITANTE = ((USUARIO)Session["UsuarioLogado"]).NOMEREDUZIDO;
                ch.STATUS = "SOLICITADO";
                ch.VALORDEBITO = ((DEBITO)Session["Debitos"]).VALORPARCELA;


                ChamadoManager chMan = new ChamadoManager();

                chMan.InsertCHAMADO(ch);//Insere o novo chamado no banco de dados

                return Json(new { sucesso = true, msg = "Chamado cadastrado com sucesso" });
            }
            catch (Exception e)
            {
                return Json(new { sucesso = false, algo = "Nao foi possível registrar o chamado. Erro: " + e.Message });
            }

        }

Изображение

enter image description here

О, я забыл упомянуть, что я включил все необходимые скрипты jquery. Включая некоторые скрипты MS Ajax (хотя я больше не использую их).

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Если это #novaSIForm было сгенерировано динамически (возможно, после вызова AJAX), вы можете потерять ваш обработчик .submit, если заменить элемент DOM.Таким образом, вы можете использовать метод .live.Также убедитесь, что подписка на событие происходит внутри обработчика событий document.ready (в случае, если вы используете .submit вместо .live)

$('#novaSIForm').live('submit', function() {
    ...
    return false;
});

Также проверьте FireBug фактический запрос AJAX, которыйотправка и отсутствие ошибок JavaScript.

0 голосов
/ 26 июля 2011

В вызове Ajax, возможно, стоит явно указать Json в качестве ожидаемого возвращаемого типа:

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