Как использовать методы Ajax.BeginForm OnSuccess и OnFailure?
Я использую этот Ajax.BeginForm
<% using( Ajax.BeginForm( "Create","Mandate",
new AjaxOptions( ) {
OnSuccess = "GoToMandates",
OnFailure = "ShowPopUpError"
} ) ) {%>
<% } %>
Что мне нужно написать в контроллере, чтобы поймать этот OnSucces и OnFailure.
Поскольку OnSuccess мне нужно показать сообщение о успехе
OnFailure Мне нужно показать сообщение othere.
В моем контроллере
Public ActionResult GetSomething(FromCollection collection)
{
if(exists == null)
{
//OnSuccess
}
else
{
//OnFailure
}
}
Может ли anydboy помочь мне... как поймать это?
Спасибо
Ответы
Ответ 1
OnSuccess и OnFailure выглядят так, как будто они ожидают функции обратного вызова javascript.
<script type="text/javascript">
function handleError(ajaxContext) {
var response = ajaxContext.get_response();
var statusCode = response.get_statusCode();
alert("Sorry, the request failed with status code " + statusCode);
}
</script>
<%= Ajax.ActionLink("Click me", "MyAction",
new AjaxOptions { UpdateTargetId = "myElement", OnFailure = "handleError"}) %>
Пример из Pro ASP.NET Framework страница 425
Класс ASP.NET AjaxOptions
Добавлен пример контроллера
Самый простой способ сделать это - это то, что у меня есть, но я рекомендую взглянуть на строго типизированные представления mvc, используя какой-то ViewModel, и, возможно, изучить использование jQuery для вашего ajax. С учетом сказанного это, надеюсь, будет работать для вас.
if (exists)
{
ViewData["msg"] = "Some Success Message";
}
else
{
ViewData["msg"] = "Some Error Message";
}
return View();
На ваш взгляд
<div id="myResults" style="border: 2px dotted red; padding: .5em;">
<%: ViewData["msg"]%>
</div>
Ответ 2
Я также искал один и тот же ответ, но выглядит как Ajax.BeginForm().. событие не хорошо документировано или нужно больше самостоятельных экспериментов, чтобы узнать, когда вызывается эти события onSuccess и onFailure. Но у меня была очень простая и простая альтернатива, чтобы не беспокоиться о настройке свойств onSuccess и onFailure AjaxOptions. Скорее, в вашем методе действий Controller просто вызовите метод onSuccess(), onFailure() javascript, отправив ActionResult в качестве JavaScriptResult. Например,
Public ActionResult Create(FromCollection collection)
{
if(exists == null)
{
//OnSuccess
return JavaScript("OnSuccess();");
}
else
{
//OnFailure
return JavaScript("OnFailure();");
}
}
И тег Ajax.BeginForm должен выглядеть как
<%
using( Ajax.BeginForm( "Create","Mandate", new AjaxOptions())) // see, no OnSuccess and OnFailure here.
{%>
<% } %>
Теперь вам нужно определить методы JavaScript на OnSuccess() и OnFailure() на вашей странице, и это так.
EDIT:
Я думал, возможно, OnSuccess() будет вызван по умолчанию, если Исключение не будет выведено с сервера. OnFailure() будет вызываться, если любое исключение будет выведено с сервера. Я еще не тестировал эту концепцию. Если это правда, тогда не будет хорошей практикой отправлять JavaScript ( "OnSuccess();" ) и JavaScript ( "OnFailure();" ); с сервера, потому что это не будет хорошим шаблоном.