ASP.NET - Ajax.BeginForm OnSuccess обратный вызов с параметрами - PullRequest
13 голосов
/ 07 ноября 2011

Я хочу добавить больше параметров к моему обратному вызову OnSuccess (, но оставить переменную контекста ajax ).
Что я сделал:

 using (Ajax.BeginForm("Register", new AjaxOptions() {
   OnSuccess = "new function(arg){HandleBasicForm(arg , 'MyCustomVariable')}",
    ...

Функция JS:

function HandleBasicForm(ajaxContext , myCustomVariable){
            var content = ajaxContext.get_response().get_object();
            ....
        }

Но ajaxContext равно нулю.
Как мне это сделать?

Ответы [ 2 ]

29 голосов
/ 07 ноября 2011

Поскольку вы используете get_response() Я предполагаю, что вы не используете ненавязчивый материал javascript (в MVC3 вы установили HtmlHelper.UnobtrusiveJavaScriptEnabled = false) и вы ссылаетесь на файлы MicrosoftAjax, js и MicrosoftMvcAjax.js , Если это так, вам просто нужно удалить ключевое слово new.

 using (Ajax.BeginForm("Register", new AjaxOptions() { OnSuccess = "function(arg){HandleBasicForm(arg , 'MyCustomVariable')}"})

Если вы используете ненавязчивую поддержку javascript MVC3 с jquery.unobtrusive-ajax.js, вы можете использовать неявно доступные переменные xhr и data.

using (Ajax.BeginForm("Register", new AjaxOptions() { OnSuccess = "HandleBasicForm(data, 'MyCustomVariable')"})

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

function HandleBasicForm(data, myCustomVariable){
    var someValue = data.someProperty; //work with data object returned
    ....
}
10 голосов
/ 13 июля 2014

OnSuccess получает data, status, xhr с сервера:

OnSuccess = "myJsMethod(data, status, xhr)"

И тогда его эквивалентный метод JavaScript будет:

 function myJsMethod(data, status, xhr) {
}

Теперь ваш контроллер должен вернуть:

return Json(new { param1 = 1, param2 = 2, ... }, JsonRequestBehavior.AllowGet);

Тогда в myJsMethod у вас будет доступ к data.param1 и т. Д.

...