Как использовать методы Ajax.BeginForm OnSuccess и OnFailure?
Я использую этот Ajax.BeginForm
<% using( Ajax.BeginForm( "Create","Mandate",
new AjaxOptions( ) {
OnSuccess = "GoToMandates",
OnFailure = "ShowPopUpError"
} ) ) {%>
<% } %>
Что мне нужно написать в контроллере, чтобы поймать этот OnSucces и OnFailure.
Потому что OnSuccess мне нужно показать сообщение об успехе
При неудаче мне нужно показать другое сообщение.
В моем контроллере
Public ActionResult GetSomething(FromCollection collection)
{
if(exists == null)
{
//OnSuccess
}
else
{
//OnFailure
}
}
Может ли кто-нибудь помочь мне.. как это поймать?
Спасибо
2 ответа
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
Пример добавления контроллера
Простейшим способом сделать это было бы то, что я получил здесь, но я рекомендую изучить строго типизированные представления 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>
Я также искал тот же ответ, но похоже, что события Ajax.BeginForm() .. недостаточно хорошо документированы или нуждаются в дополнительных самостоятельных экспериментах, чтобы выяснить, когда вызываются эти события onSuccess и onFailure. Но я получил очень простую и прямую альтернативу, чтобы не беспокоиться о настройке свойств onSuccess и onFailure в AjaxOptions. Скорее, в методе действия вашего контроллера просто вызовите метод javascript onSuccess (), onFailure (), отправив 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() на вашей странице, и это все.
РЕДАКТИРОВАТЬ:
Я думал, что, возможно, OnSuccess() будет вызываться по умолчанию, если с сервера не генерируется исключение. OnFailure() будет вызываться, если с сервера выдается какое-либо исключение. Я еще не тестировал эту концепцию. Если это так, то не рекомендуется отправлять JavaScript("OnSuccess();") и JavaScript("OnFailure();"); с сервера, потому что это не будет хорошим примером для подражания.