2014-05-21 1 views
7

je la vue suivante, qui contient un Ajax.BeginForm: -RedirectToAction avec Ajax.Beginform, des résultats inattendus

@using (Ajax.BeginForm("ChangeDevicesSwitch", "Switch", new AjaxOptions 

{ 
    InsertionMode = InsertionMode.InsertBefore, 
    UpdateTargetId = "result", 
    LoadingElementId = "progress2", 
    HttpMethod= "POST" 
    , 
    OnSuccess = "createsuccess", 
    OnFailure = "createfail" 




})) 
//code goes here 
<p><img src="~/Content/Ajax-loader-bar.gif" class="loadingimage" id="progress2" /></p> 
<div id ="result"></div> 

et la méthode d'action suivante qui sera appelée à partir du Ajax.Bginform: -

public ActionResult ChangeDevicesSwitch(SwitchJoin s) 

     {//code goes here 
      try 
      { 
       var count = repository.changeDeviceSwitch(s.Switch.SwitchID, (Int32)s.GeneralSwitchTo, User.Identity.Name.Substring(User.Identity.Name.IndexOf("\\") + 1)); 
       repository.Save(); 
       return RedirectToAction("Details", new { id = s.GeneralSwitchTo }); 

      } 
      catch (Exception e) 

      { 
       return Json(new { IsSuccess = "custome", description = "Error occurred. Please check...." }, JsonRequestBehavior.AllowGet); 
      } 



     } 

le script qui se déroulera lorsque le succès de retour Ajax.BeginForm est: -

function createsuccess(data) { 
    if (data.IsSuccess == "Unauthorized") { 

     jAlert(data.description, 'Unauthorized Access'); 
    } 
    else if (data.IsSuccess == "False") { 

     jAlert('Error Occurred. ' + data.description, 'Error'); 
    } 
    else if (data.IsSuccess == "custome") { 

     alert(data.description); 

    } 
    else { 
     jAlert('Record added Successfully ', 'Creation Confirmation'); 
    } 

} 

Curren Tly je fais face à un problème est que lorsque le RedirectToAction est atteint, la vue entière sera affichée dans la vue actuelle !! Y a-t-il un moyen de forcer mon application à ne pas mettre à jour la cible si une RedirecttoAction est renvoyée?

+1

Vous ne pouvez pas effectuer de redirection via ajax. Au lieu de cela, vous pouvez renvoyer l'url de redirection au client et, sur la fonction 'createsuccess', mettre le paramètre' window.location' sur l'url fournie. – Zabavsky

+0

pouvez-vous plus de conseils à ce sujet avec un exemple de code –

Répondre

13

Retour l'URL que vous souhaitez effectuer une redirection à partir de la méthode d'action lorsque l'opération a réussi:

public ActionResult ChangeDevicesSwitch(SwitchJoin s) 
{ 
    try 
    { 
     ... 
     return Json(new { RedirectUrl = Url.Action("Details", new { id = s.GeneralSwitchTo }) }); 
    } 
    ... 
} 

Et dans le createsuccess:

function createsuccess(data) { 
    if (data.RedirectUrl) 
     window.location.href = data.RedirectUrl; 
} 
+1

voici ** un doublure ** 'return JavaScript (" window.location = '"+ Url.Action (" Accueil "," Détails ") +"' ")' cochez [this] (http://stackoverflow.com/questions/1538523/how-to-get-an-asp-net-mvc-ajax-response-to-redirect-to-new-page-instead-of-inser), l'espoir aide quelqu'un. – stom

0

dans mon cas, la méthode suivante a été travaillé

function OnSuccess(data) { 
    var json; 
     if (data.responseText instanceof Object) 
      json = data.responseText; 
     else 
      json = $.parseJSON(data.responseText); 

     if (json.RedirectUrl) 
      window.location.href = json.RedirectUrl; 
} 
Questions connexes