ユーザーがブラウザの戻るボタンまたは更新ボタンをクリックしたかどうかを確認する必要があります。
彼が戻るボタンまたは更新ボタンをクリックしたときに、ページをエラーページにリダイレクトする必要があります。これを行う方法。
ASP.netページのjavascriptでこれを行う必要があります
ユーザーがブラウザの戻るボタンまたは更新ボタンをクリックしたかどうかを確認する必要があります。
彼が戻るボタンまたは更新ボタンをクリックしたときに、ページをエラーページにリダイレクトする必要があります。これを行う方法。
ASP.netページのjavascriptでこれを行う必要があります
まず、ユーザーがBackを使用したり、何らかの理由でページを更新する必要がある場合にエラーメッセージを表示することは、非常に悪い考えです。代わりに、透過的に対処する必要があります。交通機関レベルの問題のためにページが完全に表示されないことを考えてください。ユーザーが持つ唯一のオプションは、リロードするか戻ることです。
質問に答えるには、ユーザーのナビゲーションを自分で追跡する必要があります。つまり、サーバー側で追跡する必要があります。ここでjava-scriptを忘れてください。ユーザーがWebサイトにアクセスした場合、その情報をユーザーに関連付けられたセッションに保存できます(これらの固有のセッションを維持する方法はいくつかありますが、ここでは詳しく説明しません)。ユーザーが最近アクセスしたページを内部構造に保存すると、2回アクセスされたページ、または「間違った」方向に進んでいるナビゲーションを簡単に判別できます。
「許可された」ナビゲーションのグラフを作成し、ユーザーがアクセスしているときにそれをトラバースすることで、これを簡単に一般化できます(たとえば、ユーザーがURL間を激しくジャンプしたり、一度に複数のステップに戻ったりすることに対して、全体をより堅牢にすることができます)。ウェブサイト。
ユーザーが「間違った」ナビゲーションを行っている場合の正しい動作(ステップバック、リロード== 2回の訪問など)は、ユーザーを軌道に戻すことです。彼は逃げられないというエラーメッセージを出さないでください!彼はリロードまたは戻ることが許可されていないため、オプションが残っていません。
できません。ブラウザは、独自の UI イベントをサーバーに送信しません。取得するのは http リクエストだけで、あるものは別のものとほとんど同じように見えます。戻るボタンをクリックしたか、最後の URL を再入力しただけかもしれません。どのような問題が発生しているか教えてください。プロジェクトが http プロトコルでより適切に動作するように調整することができます。
セッションに保存された GUID/タイムスタンプを使用して PageToken を実装し、その値をフォームの非表示フィールドと比較します。これはPageToken Classを介して行いました。非表示フィールドの値とセッション変数が一致しない場合は、同期が取れていないため、それを処理します。秘訣は、ページ上のすべてのイベントをマップすることです。
public void GeneratePageToken()
{
SessionVariables currSession = new SessionVariables();
hfMasterPageToken.Value = System.DateTime.Now.ToString();
currSession.PageToken = hfMasterPageToken.Value;
}
public string GetLastPageToken
{
get
{
SessionVariables currSession = new SessionVariables();
return currSession.PageToken;
}
}
public bool TokensMatch
{
get
{
SessionVariables currSession = new SessionVariables();
return (currSession.PageToken != null
&& currSession.PageToken == hfMasterPageToken.Value);
}
}
通常のコードの前の Event メソッドで:
if (this.TokensMatch == false)
{
//Reload the data.
//Generates a NewPageToken (this.GeneratePageToken();)
ReloadDataMethod();
this.MessageToUser =
"Data reloaded. Click Edit or Insert button to change.";
this.MessageType = MessageToUserType.Success;
this.DisplayMessageToUser = true;
return;
}
Site.Master
あなたSite.Master
の後に入れてください<body>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
<dx:ASPxLoadingPanel ID="MainLoadingPanel" runat="server" ClientInstanceName="MainLoadingPanel" Modal="True" />
<input type="hidden" id="refreshed" value="no" />
<script type="text/javascript" language="javascript">
MainLoadingPanel.Show();
window.onload = function () {
var e = document.getElementById("refreshed");
if (e.value == "no") {
MainLoadingPanel.Hide();
e.value = "yes";
} else {
e.value = "no";
location.reload(true); // Reload the page or redirect...
}
};
</script>
Site.Master
共通コードでは、後に置きます<body>
<input type="hidden" id="refreshed" value="no" />
<script type="text/javascript" language="javascript">
window.onload = function () {
var e = document.getElementById("refreshed");
if (e.value == "no") {
e.value = "yes";
} else {
e.value = "no";
location.reload(true); // Reload the page or redirect...
}
};
</script>
アクションやデータの再送信を避けるために、ポストバックのためにこれを実行したいと思いますか?皮肉なことに、これはasp.net Webフォームの前にはそれほど大きな問題ではありませんでした...通常、同じURLではなく別のURLに投稿する必要があったためです(実際にはasp.net mvcのように)。
私が使用するのが好きだったトリックの1つは、最も技術的なポイントでは遅くなりますが、入力ページと投稿ページを用意することでした。投稿ページのHTML出力は、ブラウザの履歴内の(投稿ページの)現在のURLを結果ページ(または本当に必要な場合は元の参照ページ)に置き換えた小さなjavascriptを含む非常に最小限のHTMLでした。その結果、ユーザーが[戻る]ボタンをクリックすると、元の入力ページに移動するか、[更新]をクリックすると、既に新しい結果ページが表示されます。
<html><body onload="location.replace('someURL.asp')"></body></html>
送信ボタンにプロパティを配置することで、Java/Struts1 でそれを行いました。送信ボタンがクリックされた場合、ボタンのテキストは ActionForm のプロパティで送信されます。ユーザーが情報を更新した場合、値は設定されていないため、ユーザーがボタンをクリックしていないことがわかりました。プロパティが空のこのケースでは、戻ってページフローの最初のページをレンダリングしました。ASP.Net の YMMV。
.NET 3.5 は、ブラウザの戻る (および進む) ボタンをうまく処理できます。Google で検索: 「Scriptmanager EnableHistory」。どのユーザー アクションがブラウザーの履歴にエントリを追加するか (ScriptManager -> AddHistoryPoint) を制御でき、ユーザーがブラウザーの [戻る]/[進む] ボタンをクリックするたびに、ASP.NET アプリケーションがイベントを受け取ります。