UpdatePanel内にLinkButtonがあり、UpdatePanelがその内容を更新する前にクライアントが2回以上クリックすることを望まない。現在、リンクボタンは、更新パネルが更新されるまで、クライアント側のクリックごとに部分的なポストバックを開始します。この特定のリンクは、私が不必要に実行したくない非常に高価なプロセスを起動します。これを行うための.NET標準の方法はありますか?これに対する良い解決策は何ですか?ありがとう。
5 に答える
UpdatePanelAnimationExtenderを使用します。優れたエクスペリエンスを作成し、更新パネルが終了するまでそれ以上の対話を防ぐために使用できます。これをDGHのサーバー側ブール値と組み合わせて、ユーザーがページを更新して再度送信するのを防ぎます(ブール値をセッション状態で保存します)。
UpdatePanelAnimationExtenderの詳細については、次を参照してください。
https://github.com/DevExpress/AjaxControlToolkit/wiki/UpdatePanelAnimation
基本的な方法の1つは、サーバー側またはセッション変数でラストクリックが発生した時刻を記録することです。クリックするたびに、ラストクリック時間と照合します。間隔が小さすぎる場合は、残りのプロセスを開始せずに戻ります。
もう1つの方法は、メソッドの開始時に「active」などのブール値をtrueに設定し、終了時にfalseに戻すことです。メソッドの開始時に、その変数の現在の状態を確認し、それに応じて動作します。
これら2つの方法の主な違いは、最初の方法では、十分に長い間隔でずらされている限り、メソッドの複数のインスタンスを同時に実行できることです。2番目のメソッドは、現在のインスタンスが終了するまで、メソッドの新しいインスタンスを常に強制終了またはブロックします。
enabled=false
部分的なポストバックが終了するまでその上にドロップしてから、enabled=false
属性を削除します。
Page_Load
初めて無効になるように、このようなことを試してください。
button.Attributes.Add("onclick",
"this.disabled = true;"
+ this.ClientScript.GetPostBackEventReference(button, String.Empty) + ";");
次に、部分的なポストバックの最後に再度有効にしますか?
上記の解決策はどれも私にはうまくいきませんでした。
私がやったことは:
function InitializeRequest(sender, args) {
var oSender = args._postBackElement;
if (oSender.id == "btnSave") {
oSender.href = "javascript: void(0);";
}
}
function EndRequestHandler(sender, args) {
var oSender = sender._postBackSettings.sourceElement;
if (oSender.id == "btnSave") {
oSender.href = "__doPostBack('" + oSender.id + "', '');";
}
}
function load() {
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequest);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
}
<body onload="load()">
ScriptManagerの後のページに次のスクリプトを配置します。
<script type="text/javascript">
var postbackControl = null;
var parm = Sys.WebForms.PageRequestManager.getInstance();
parm.add_beginRequest(BeginRequestHandler);
parm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args)
{
postbackControl = args.get_postBackElement();
postbackControl.disabled = true;
}
function EndRequestHandler(sender, args)
{
postbackControl.disabled = false;
postbackControl = null;
}
</script>