jQuery, вызывающий действие и возвращающий представление

#asp.net-mvc #jquery-ui

#asp.net-mvc #jquery-пользовательский интерфейс

Вопрос:

У меня есть диалоговое окно в jQuery с двумя кнопками. При нажатии кнопки «Загрузить в любом случае» я вызываю действие моего контроллера. $(function () { $(«#dialog:ui-dialog»).dialog(«уничтожить»);

 $("#dialog-confirm").dialog({
    resizable: false,
    height: 300,
    width: 500,
    modal: true,
    buttons: {
        "Upload Anyway": function () {
            $(this).dialog("close");
            var month = '@ViewBag.duplicateString' ;
            var path = $("#path").val();
           $.getJSON('@Url.Action("UpdateComp")', { dateToUpdate: month, filePath: path }, 
            function()   {});
        },
        Cancel: function () {
            $(this).dialog("close");
        }
    }
});
  

В контроллере я просто хочу обработать данные и вернуть представление.

     public ActionResult UpdateComp (string dateToUpdate, string filePath)
    {
        //Process Data
        return View(compList.Values.AsEnumerable<CompUser>());
    }
  

Когда я нажимаю на кнопку «Загрузить в любом случае», я правильно перенаправляюсь на действие (я проверил с помощью debug), но представление не загружается. Я не очень хорош в jQuery, поэтому, возможно, я делаю что-то не так.

Спасибо за вашу помощь!

Ответ №1:

Ваш обратный вызов для $.getJSON ничего не делает. См. http://api.jquery.com/jQuery.getJSON / и посмотрите на параметр «успех».

Но, если вы возвращаете представление (HTML и т. Д.), Тогда вы не «получаете JSON», Вы получаете HTML. Попробуйте вместо этого использовать $.get или $.post (в зависимости от требований) и отобразить возвращенное представление пользователю при успешном обратном вызове.

Комментарии:

1. Если я вас хорошо понимаю, я должен вызвать свое представление в функции успеха jQuery. Если это так, я понятия не имею, как это сделать, и, прежде всего, как предоставить модель представлению в Jquery???

2. Я пробовал с $.get и $.post, но тоже ничего не добавлял. Я действительно не понимаю, почему он не перенаправляет меня на мой взгляд…

Ответ №2:

Изменение $.getJSON на $.get и отображение результирующего представления в моем основном разделе решают проблему.

Обратите внимание, что я отображаю частичное представление, чтобы правильно отобразить div.

Вот код jQuery, надеюсь, это поможет кому-то другому.

 $(function () {
$("#dialog:ui-dialog").dialog("destroy");
$("#dialog-confirm").dialog({
    resizable: false,
    height: 300,
    width: 500,
    modal: true,
    buttons: {
        "Upload Anyway": function () {
            $(this).dialog("close");
            var month = '@ViewBag.duplicateString' ;
            var path = $("#path").val();
            $.get('@Url.Action("UpdateComp")', { dateToUpdate: month, filePath: path }, function(result) {
                $('#main_div').html(result);
            })
                .error(function() { alert("A Problem occurs during the comparison"); });
        },
        Cancel: function () {
            $(this).dialog("close");
        }
    }
  });
});
  

Комментарии:

1. Извините, что не ответил на ваши комментарии. Вы реализовали мой ответ и отметили свой ответ как ответ…

Ответ №3:

Попробуйте это

 var url = '@Url.Action("method_name", "controller_name")?dateToUpdate='   month   'amp;filePath='   path;
window.location.href = url;