Как обновить div с помощью Ajax.BeginForm И выполнить функцию JavaScript? - PullRequest
10 голосов
/ 01 октября 2010

Я обновляю div с частичным представлением, используя что-то вроде этого:

<% using (Ajax.BeginForm("Action", "Controller",
               new { id=Model.id },
               new AjaxOptions
               {
                   UpdateTargetId = "divId",
                   InsertionMode = InsertionMode.InsertAfter,
               }))
   {  %>

и все работает нормально, возвращенное представление присоединяется к div, однако теперь мне нужно выполнить JavaScript, когдасообщение успешно, поэтому я подумал: "просто, просто добавь OnSuccess = "MyJsFunc()"" к AjaxOptions, но после этого он перестал работать!теперь страница обновляется, и отображается только возвращенное частичное представление :(, я даже попробовал с простым Alert("Hi") и он не работает .. как я могу заставить это работать?

(кстати, ядумаю, что это может быть дубликатом https://stackoverflow.com/questions/1994754/execute-javascript-after-loading-a-mvc-page-using-ajax-beginrouteform, но этот вопрос был оставлен без ответа)

Ответы [ 2 ]

16 голосов
/ 01 октября 2010

Есть ли причина, по которой мы поступили неправильно (ведь мы находимся в 2010 году)?Дамп MS AJAX, где он принадлежит, вместе со всеми Ajax.* помощниками, которые зависят от него, и напишите правильный код.Хотя использование MS AJAX в классических веб-формах могло быть оправдано из-за UpdatePanels и т. Д. ... делать это в новом приложении ASP.NET MVC сегодня, особенно после того, как Microsoft полностью приняла jQuery, кажется плохой идеей.

Итак, после разглагольствования вот моя рекомендация:

<% using (Html.BeginForm("Action", "Controller", new { id = Model.id }) { %>

, а затем незаметно присоедините обработчик отправки, используя jquery в отдельном файле:

$(function() {
    $('form').submit(function() {
        $.ajax({
            url: this.action,
            type: this.method,
            success: function(result) {
                // feel free to execute any code 
                // in the success callback
                $('#result').html(result);
            }
        });
        return false;
    });
});

или используя превосходный плагин jquery form :

$(function() {
    $('form').ajaxForm(function(result) {
        // feel free to execute any code 
        // in the success callback
        $('#result').html(result);
    });
});

Преимущества этого подхода:

  • Ненавязчивый
  • Четкое разделение между разметкой и javascript
  • Кэширование файлов javascript и уменьшение использования полосы пропускания

Бонус: нет головной боли.

5 голосов
/ 01 октября 2010

Я продолжал осматриваться и находил ответ здесь:

Назначение функции Javascript свойству AjaxOptions OnSuccess вызывает ошибку - ASP.NET MVC (с ответом, который не был выбран)

Цитирование Atzu

Если вам нужно передать какой-либо параметр в событие OnSuccess, вам, возможно, придется написать функцию следующим образом.

OnSuccess = "function(){exampleFunction('" + param1 + "');}

и у меня это сработало!

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