1

Button onclientClick イベントに __doPostBack() を明示的に追加しました。

<asp:Button ID="Button1" runat="server" Text="Button" 
         OnClientClick="__doPostBack('Button1','')"/> 

ボタンをクリックすると、Page_Load が 2 回呼び出されます。しかし、ページの読み込み内に以下のコードを追加すると、ボタンのクリック時にページの読み込みが 1 回だけ呼び出されます。

Button1.Attributes.Add("onClientClick", "__doPostBack('Button1','')");

繰り返しますが、 return false を追加すると、クリック時にページが読み込まれるのは1回だけです

 <asp:Button ID="Button1" runat="server" Text="Button" 
         OnClientClick="__doPostBack('Button1','');return false;"/>

true を返すと、ページの読み込みが 2 回繰り返されますが、attribute.add コードに return true または false を追加すると、同じ結果が返され、ページの読み込み呼び出しは 1 回だけになります。

Button1.Attributes.Add("onClientClick", "__doPostBack('Button1','');return true;");

__doPostBack を別の方法で追加しようとしたときに、何が起こっているのか正確に理解できません。助けてください。ありがとう

4

4 に答える 4

4

OnClientClickを配置することにより、asp.netはコードとdoPostBackの両方を使用してクライアントサイズでonlick関数をレンダリングします。

つまり、1回は自分で呼び出し、もう1回は追加したために2回呼び出されます。

于 2010-09-20T07:39:54.600 に答える
1

Aristos と user449689 の答えは正しいです。ASP.NET ボタンは常にポストバックを行うため、二重のポストバックがあります (そのため、OnClientClick は前に別のポストバックをトリガーするため役に立ちません)。

OnClientClick から true を返す (または何も返さない) 場合、ボタンの JavaScript onClick イベントは妨げられません (つまり、ボタンは引き続きクリックされ、_doPostBack がトリガーされ、その後に通常のポストバックが行われます)。false を返すと、onClick イベントはキャンセルされます (つまり、ボタンは実際にはクリックされていないため、_doPostBack のみがトリガーされます)。これが JavaScript の動作です。

OnClientClick 属性は、HTML コードで "onClick" としてレンダリングされます (この属性が ASP.NET ボタン上にある場合)。あなたの発言...

Button1.Attributes.Add("onClientClick", "__doPostBack('Button1','');return true;");

... JavaScript イベントではない「onClientClick」をレンダリングするため、有効な HTML ではありません (つまり、_doPostBack はトリガーされませんが、通常のポストバックはトリガーされます)。Attributes プロパティは、ボタンの最終的なレンダリングにストレートな HTML 属性 (.NET からの書き換えなし) を追加するために使用されます。

私のアドバイス:ポストバックをトリガーする他の代替手段が見つからない限り、_doPostBackを呼び出さないでください。あなたが提供したサンプルでは、​​OnClientClick 属性は完全に冗長です。

私は十分に明確だったと思います(私の英語は上手ではありません)。

于 2011-12-08T02:19:59.523 に答える
1

Button は既に PostBack を実行しているのに、なぜクライアント側から呼び出す必要があるのでしょうか?

とにかく、あなたの場合のpage_loadは2回呼び出されます.1回はOnClientClickによって行われ、2回目はサーバー側です。

于 2010-09-19T21:29:44.613 に答える
0

レンダリングされた出力を表示して (つまり、ブラウザーで ASPX ページにアクセスしてページ ソースを表示)、結果の HTML/Javascript がどのように見えるかを確認してみてください。__doPostBackが 2 回呼び出されている可能性があります。

于 2010-09-20T00:14:21.370 に答える