2009-05-12 9 views
4

JQueryの確認ポップアップがあり、はい、いいえボタンがあります。 [はい]ボタンは、この関数を呼び出します。JQueryがコントローラ上でアクションを呼び出す(ただし、リダイレクトしない)

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

      }); 
      return false; 
     } 

これが正常に私のコントローラのアクション(2異なる試み)を呼び出します:

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';"); 
    } 

どちらの場合も、アクションが実行されますが、他のアクションへの再直接行います発生しない。どうして?

答えて

0

Webサービスのリダイレクト呼び出しで、このように動作しない問題が発生しました。

別のアプローチは、(= .... Window.location.href)を

それとも、単にHTMLを行いますが、その後、クライアントにリダイレクトを行うにはJavascriptを使用してリダイレクトするURLを送信することですWebサービス呼び出しの代わりに送信します。

3

非同期に呼び出されるアクション($ .post)からリダイレクトできないためです。代わりにhereを見てください。

0

あなたはajaxを使用しているため、アクションからのリダイレクトは無視されます。

リダイレクトを呼び出すソリューションは、通常のFORM POSTとAJAXを使用しない別のヘルパーを作成することができます。ページ全体がPOSTされ、アクションがリダイレクトされます。上記の

 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

はここでまさにその私のヘルパーの一部です。

1

OtherContControl ... [AcceptVerbs(HttpVerbs.Post)]で飾られていますか?

もしそうなら、最初の問題があります。 JavaScriptResultを返すアクションが動作します。しかし、アクションがHttpVerbs.Postで装飾されている場合、それに対してGetアクションはなく、404が見つからないというAjax呼び出しが発生しています。もちろん、それは非同期に起こっているので、あなたはそれを知る方法がありません。エラーメッセージは表示されません。

2番目の問題は簡単です。あなたは言った...何を意味するとした

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

... ...

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

...以上の適切...

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

あなたを取得する必要があることそこ。

関連する問題