2009-05-12 7 views
4

Ich habe ein JQuery-Bestätigungs-Popup mit Ja, Nein-Schaltflächen. Die Ja-Taste ruft diese Funktion:JQuery ruft die Aktion auf dem Controller auf (aber nicht nach)

function doStuff() { 
      $('#confirmPopup').dialog("close"); 
      var someKey = $("#someKey")[0].value; 
      $.post("/MYController/MyAction", { someKey : someKey }, 
      function(responseText, textStatus, XMLHttpRequest) { 

      }); 
      return false; 
     } 

Diese erfolgreich ruft mein Controller-Aktion (2 verschiedene Versuche):

public ActionResult MyAction(int someKey) 
{ 
    //do stuff 
    return RedirectToAction("OtherAct", "OtherCont"); 
} 



public JavaScriptResult MyAction(int someKey) 
    { 
     //do stuff 
     return JavaScript("Window.location.href='OtherCont/OtherAct';"); 
    } 

In beiden Fällen wird die Aktion ausgeführt wird, aber wieder direkt auf die andere Aktion tut nicht vorkommend. Warum?

Antwort

0

Ich habe Probleme mit Web-Service-Umleitungsaufrufen gesehen, wo sie auf diese Weise nicht funktionieren.

Ein weiterer Ansatz ist es, die URL, die Sie an den Client zurück umleiten möchten zu senden, dann Javascript verwenden, um die Umleitung zu tun (window.location.href = ....)

Oder tun nur eine HTML Senden Sie anstelle eines Web-Service-Aufrufs.

3

Da Sie nicht von einer Aktion umleiten können, die asynchron aufgerufen wird ($ .post). Suchen Sie nach here für Alternative.

0

Weil Sie Ajax verwenden, was bedeutet, dass eine Weiterleitung von der Aktion ignoriert wird.

Eine Lösung für den Redirect-Aufruf könnte sein, einen anderen Helper zu erstellen, der einen normalen FORM-POST und keinen Ajax verwendet. Dann wird die ganze Seite POST und die Aktion wird umgeleitet.

Hier ist ein Teil meiner Helfer, die genau das tut:

 string deleteLink = String.Format(@"<a onclick=""deleteRecord({0})"" href='#'>Delete</a><form id='deleteForm' method='post' action='" + 
      routeRelativePath + "/" + actionPrefix + "Delete/" + model.ID + 
      @"'></form>", model.ID); 

.. more auf dem oben.

1

OtherAct auf OtherContController ... ist es mit [AcceptVerbs (HttpVerbs.Post)] dekoriert?

Wenn ja, gibt es das erste Ihrer Probleme. Ihre Aktion, die ein JavaScript-Ergebnis zurückgibt, funktioniert. Wenn die Aktion jedoch mit einer HttpVerbs.Post versehen ist, gibt es keine Get-Aktion dafür und der Ajax-Aufruf erhält eine 404 nicht gefunden. Da es asynchron passiert, haben Sie natürlich keine Möglichkeit, das zu wissen. Es würden keine Fehlermeldungen angezeigt.

Das zweite Problem ist einfacher. Du hast gesagt ...

return JavaScript("Window.location.href='OtherCont/OtherAct';") 

... wenn das, was Sie gemeint war ...

return JavaScript("window.location.href='OtherCont/OtherAct';") 

... oder mehr richtig ...

return JavaScript("window.location.href='" + 
     Url.Action("OtherAct", "OtherCont") + "';"); 

dass sollten Sie Dort.

Verwandte Themen