ASP.NET - Ajax.BeginForm OnSuccess обратный вызов с параметрами

Я хочу добавить еще несколько параметров для моего обратного вызова 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 равно null.
Как это сделать?

Ответы

Ответ 1

Поскольку вы используете 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
    ....
}

Ответ 2

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 и т.д.