2016-04-25 148 views
0

私は、ASP.NETアプリケーション(C#/ MySQLバックエンド)に直面している問題の解決策を探しています。ASP.NETはブラウザ 'バック'を防ぎます

アプリケーションは、SQLデータベースにデータを挿入するために複数ステップのウィザードでWebフォームを使用します。さまざまなステップはjavascriptで駆動されるため、 '最後の'ステップまで 'submit'は実行されません。とにかく、最後のステップの直後にユーザーがブラウザの「戻る」ボタンをクリックすると、フォームが再送信され、SQL INSERTが再度トリガーされて元のレコードの二重引用符が作成されます。

ウィザードが「最後の」ステップに達するまで、フォームのステップを追跡するために、Ajaxベースのメカニズムを使用することを強くお勧めします。同じAjax関数のあと、私はフォームの再送信を防ぎ、Dupesを防ぎます。

私は明らかな理由から、戻るボタンを無効にするためにJavaScriptのトリックを使用したくありません。

このソリューションの主な問題は、私がそれほど好きではないことと、アプリケーションフォームのウィザードが非常に明確になっていて、これが問題を引き起こす可能性があることです。

複雑なインフラストラクチャを構築することなくこうした問題を防ぐベストプラクティスはありますか?

誤解を招き、不要になると思われるため、私はコードを掲載していません。

敬具、 マイク

+0

を。それを処理する "公式の"方法はないので、私のアプローチは、Webアプリケーションをそれに対処させることです。 – Alexander

+0

ブラウザの戻るボタンを無効にすることはできません。アプリケーション内のロジックのみを処理する必要があります。 –

+0

@ Piyush Khatri ...あなたは私の質問を読んでいないようです。 私はバックボタンを無効にする方法を求めていません...私はそれを書きました。 実際の質問は、「再送信」問題を克服する戦略を定義する方法です。 私はこのような問題がビジネスロジックと干渉することなく修正できることは確かです。また、私は同じ問題を経験している唯一のASP.NETユーザーではないと確信しているので、誰かがそれを乗り越えるための手のひらな方法を定義していると見積もることができます。 – weirdgyn

答えて

0

は、私は私の問題への解決策を見つけました。私はこれが、同じ問題に直面している人々のための合理的に良い習慣になると思う。もちろん完璧ではありませんが、他の誰かがこれを「完璧な解決策」として洗練することができます。私はこの配置レコードを複製したフォームを立ち上げ

ページの.aspxコードでまず:バックエンドのコードで

<asp:LinkButton 
    ID="_btnForm1" 
    runat="server" 
    OnCommand="Link_Command" 
    CommandArgument='<%#Eval("id","~/Form1.aspx?id={0}&step=Exit")%>'> 
    Form1 
</asp:LinkButton> 

私はLink_Buttonコマンドのhanlderを作成:

protected void Link_Command(object sender, CommandEventArgs e) 
{ 
    Session["key"] = Guid.NewGuid().ToString().Replace("-", string.Empty); 

    Response.Redirect(e.CommandArgument.ToString()); 
} 

要するに、Sessionの値として格納するユニークなハッシュコードを生成します。

フォームを管理しているレコードで、Session["key"]の値が存在し、nullではないことを確認しました。キーが存在する場合、コードが重要な部分に達していない場合、フォームは問題なく再送信する必要があります。ユーザーは重要な部分SessionキーISN後にフォームを再送信しようとすると、その後

Session.Remove("key"); 

:コードは(単にデータベースへのデータ挿入前に)重要な部分に到達すると

私はSession["key"]値をクリア「がtはもはや提示したコードは、トラップでした 『異常』とエラーメッセージを表示したり、別のページの上にリダイレクトする:すべてのブラウザでは、[戻る]ボタンを提供しているので、私はそれが無駄それに対して動作しようとする見つける

if (Session["key"] == null) 
{ 
     Response.Redirect("Error.aspx?script=" + HttpUtility.UrlEncode(Request.Path)); 
} 
関連する問題