Есть лучший способ сделать это - использовать встроенные параметры, которые можно ожидать от вызова OnSuccess
встроенные параметры (те, которые я до сих пор нашел) - это данные, статус и xhr
данные = все, что вы возвращаете из метода действия
status = в случае успеха этот статус - просто строка с надписью «success»
xhr = объект, который указывает на кучу javascript вещей, которые я не буду обсуждать ...
чтобы вы могли определить свой javascript следующим образом (вы можете опустить ненужные аргументы - поскольку все, что нам нужно, - это вернуть данные из действия, мы просто возьмем аргумент data)
function myOnSuccessFunction (data)
{
..do stuff here with the passed in data...
}
Как я уже говорил, данные - это любой JSON, который может быть возвращен ActionResult, поэтому, если ваш метод действия контроллера выглядит следующим образом ...
public ActionResult MyServerAction(Guid modelId)
{
MyModel mod = new MyModel(modelId);
mod.DoStuff();
return Json(mod, JsonRequestBehavior.AllowGet);
}
вы бы настроили свою ссылку для действий следующим образом ...
@Ajax.ActionLink("Do Stuff", "MyServerAction", new { modelId = Model.Id }, new AjaxOptions { OnSuccess = "mySuccessScript(data);", OnFailure = "myFailureScript();", Confirm = "Are you sure you want to do stuff on the server?" })
это создаст окно с сообщением о подтверждении, спрашивающее, хотите ли вы на самом деле вызвать действие - нажатие кнопки «Да» в приглашении вызовет вызов к контроллеру - когда вызов возвращается - аргумент данных будет содержать объект JSON независимо от того, вернулся в ваш метод действия. Easy Peasy!
Но подождите! Что делать, если я хочу передать другой пользовательский аргумент ?! Просто! Просто добавьте свои аргументы в начало списка ...
вместо этого ...
function myOnSuccessFunction (data)
{
..do stuff here with the passed in data...
}
сделать это (вы можете иметь более одного пользовательского аргумента, если хотите, просто продолжайте добавлять их по мере необходимости) ...
function myOnSuccessFunction (myCustomArg, data)
{
..do stuff here with the passed in data and custom args...
}
затем в вашей настройке - просто получите аргумент через некоторый клиентский скрипт в вашем определении ActionLink ... то есть
@Ajax.ActionLink("DoStuff", "MyServerAction", new { modelId = Model.Id }, new AjaxOptions { OnSuccess = "mySuccessScript(myClientSideArg, data);", OnFailure = "myFailureScript();", Confirm = "Are you sure you want to do stuff on the server?" })
Обратите внимание, что «myClientSideArg» в параметре OnSuccess может приходить откуда угодно, просто замените этот текст на то, что вам нужно.
Надежда, которая помогает!