0

フォームを送信するとすぐに別のページにリダイレクトされるようにします。コントローラーの動作httpostが呼び出されたときにどうなるか気にしない。ボタンをクリックするかフォームが送信されるとすぐに、ユーザーにページをリダイレクトさせたいだけです。以下、私が試してみましたが、そのはボタンをクリックしてjavascript/jqueryを使用してページをリダイレクトするASP.net MVC 5アプリケーション

CSHTMLファイルスニペット

<script> 
    $(document).ready(function() { 
     $('#formSubmitButton').click(function() { 
      debugger; 
      // Neither works 
      window.location.href = "/Home/Index"; 
      window.location.href = "https://www.google.com"; 


     }); 
    }); 
</script> 

ホームコントローラー

public ActionResult Index() 
     { 
      return View(); 
     } 

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult SavePayment(PaymentFormMV data) 
{ 
    return View ("Hello") 
} 
を打つます実際httpostコントローラ方法を動作していないものです

JavaScriptコードでブレークポイントがヒットするのがわかります。しかし効果はありません。また、通常のポストコールは期待どおりに進み、SavePaymentメソッドが呼び出され、それに応じてビューhelloが呼び出されます。私を案内してください。なぜ私はボタンをクリックしてインデックスページにユーザーをリダイレクトできません。私は、SavePaymentが最終的に呼び出されることは知っていますが、リダイレクトは機能していません。何か不足していますか?

編集: ここに全体の話があります。顧客は支払いをしており、支払いの一部はタイムアウトしています。 "Hello"リダイレクションは、タイムアウトが発生していない場合は完璧です。だから、基本的にタイムアウトが2分で起きたら。ユーザーをホームページにリダイレクトする前に、タイマーを1.58分に設定します。 postメソッドが成功を返した場合、 "Hello.cshtml"が呼び出されます。しかし、IISサーバーが2分後にtime out exceptionを投げようとしている場合、IISがキックアウトしてユーザーをホームページにリダイレクトする前に、私のJavascriptコードはタイムアウトします(1.58タイマー)。そして、最終的に発生するIISタイムアウトエラーが、ユーザーが安全にリダイレクトされたホームページを上書きしないことを願っています。私を案内してください。結論私はIISがユーザーを追い出すのをやめたい。私は、通常のリダイレクト自体が機能していないので、JavaScriptコードスニペットでタイムアウト間隔コードを追加していません。

答えて

2

送信ボタンをクリックするとフォームが送信され、HttpPostアクションメソッドは投稿されたフォームデータを処理し、ViewResult(「Hello」ビューから生成されたhtmlマークアップ)を返します。フォームが送信されているので、それはあなたがあなたがPRGパターン

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult SavePayment(PaymentFormMV data) 
{ 
    //do something 
    return RedirectToAction("Index","Home"); 
} 
のように、正常に保存を実行した後、あなたのアクションメソッドであなたのリダイレクトを行う必要があります window.location.href

を設定しているjsのコードを実行されません

クライアントサイドスクリプトを使用してリダイレクトを行いたいが、フォームを送信して処理したい場合(fire-forgetファッションのように)、ajaxフォームの投稿を検討することができます。

$('#formSubmitButton').click(function (e) { 

    e.preventDefault(); // Prevent normal form submit 

    var _form=$(this).closest("form"); 
    $.post(_form.attr("action"),_form.serialize(),function(res){ 
     //If you want to check the response and then do redirection 
     // you should do it here. Make sure you return a json response from server then 
    }); 
    window.location.href = "https://www.google.com"; 

}); 

編集:ここで問題の編集を1として

は全体の話です。クライアントは支払いをしており、一部の支払い はタイムアウトしています。 タイムアウトが発生していない場合、「Hello」リダイレクトは完全に正常です。だから、基本的にタイムアウトが発生する場合は、2 分です。それから私はタイマーを置くでしょう のユーザーをホームページにリダイレクトする前に1.58分かもしれません。 postメソッドが成功を返した場合、 "Hello.cshtml"が呼び出されます。しかし、IISサーバーが の場合、2分後にタイムアウト例外をスローしようとした場合、 IISが をキックアウトし、ユーザーをホームページにリダイレクトする前に、JavaScriptコードがタイムアウト(1.58タイマー)します。そして、IIS時間の最終的に発生するエラー がホームページを上書きしないことを願っています そのユーザーは安全にリダイレクトされました。私を案内してください。結論I は、IISがユーザーを追い出すことを望みません。このようなユーザスレッドで2分かかりますと、私は通常の リダイレクト自体は私の最初の応答がある

が動作していないbecasue javascriptのコードスニペットでタイムアウト 間隔のコードを追加していない、何もしないでください。それは良いユーザーエクスペリエンスではありません。私はどこから2分のタイムアウトを得ているのかわからない!しかし、私はあなたがこの長い時間がかかるコードを修正することをお勧めします。あなたはajaxコール(上のajaxコードのサンプルを参照)と200 OKレスポンス(またはsuccessコールバック)が得られない場合には、クライアントサイドで何かをするかもしれないので、オフロードする必要があります。再試行する)。これにより、ローカルのJavaScriptタイマーの使用を排除できます。

ボトムラインは:2分以上かかるコードを修正してください!あなたの問題やユースケースを解決する別の方法があるかもしれません。

+0

これは正しい方法ですが、OPがページから離れてフォームの投稿を離れさせるように思えます。 – nurdyguy

+0

@nurdyguy:そうです。 Shyju:あなたは編集を見ることができます – Unbreakable

+0

@無謀編集 – Shyju

関連する問題