0

標準のasp:Buttonコンポーネントを使用する場合、自動ポストバックをキャンセルするには(または条件付きでポストバックを作成するには)、次の手法を使用する必要があります。

  • Button.OnClientClickプロパティを介してクライアント側の操作を指定します。

  • ポストバックを実行する必要があるかどうかを示すブール値を返すロジックを実装します。

以下はポストバックをキャンセルしません(「OnClientClickHandler」メソッドが「false」を返すにもかかわらず):

<asp:Button ID="btn" runat="server" OnClientClick="OnClientClickHandler();" />

function OnClientClickHandler() {
    return false;
}

次の実装は行います:

<asp:Button ID="btn" runat="server" OnClientClick="return OnClientClickHandler();" />

この動作は、JavaScriptコードスコープの詳細が原因であるようです。とにかく、私はこのシナリオの低レベルの実装の詳細に興味があります。

最初の実装(「OnClientClickHandler」メソッド呼び出しの前に「return」演算子がない場合)が機能しないのはなぜですか?

4

2 に答える 2

0

MSDNから

OnClientClickプロパティを使用して、ButtonコントロールのClickイベントが発生したときに実行される追加のクライアント側スクリプトを指定します。このプロパティに指定するスクリプトは、コントロールの事前定義されたクライアント側スクリプトに加えて、ButtonコントロールのOnClick属性でレンダリングされます。

また、このSubmitBehaviourのように言及しています

UseSubmitBehaviorプロパティを使用して、Buttonコントロールがクライアントブラウザーの送信メカニズムを使用するか、ASP.NETポストバックメカニズムを使用するかを指定します。デフォルトでは、このプロパティの値はtrueであり、Buttonコントロールはブラウザの送信メカニズムを使用します。falseを指定すると、ASP.NETページフレームワークはクライアント側のスクリプトをページに追加して、フォームをサーバーに送信します。

<asp:Button ID="btn" runat="server" OnClientClick="return OnClientClickHandler();" UseSubmitBehavior="false" />

このようにしてみてください

function CancelPostBack()
{
  return false;
}

c#コード。PageLoadイベントで。

btn.Attributes.Add("onclick","return CancelPostBack();");
于 2012-06-29T12:36:42.370 に答える
0

追加する必要がある理由returnは、イベントハンドラーからfalseを返すことが、デフォルトの動作をキャンセルする方法であるためです(この場合、フォームを送信します)。

同じことを行う別の方法は、実行することですevent.prefentDefault()

OnClientClick="OnClientClickHandler();"と同等になります

function onclick(){
    OnClientClickHandler();
}

OnClientClick="return OnClientClickHandler();"同等ですが

function onclick(){
    return OnClientClickHandler();
}

違いがわかりますか?最初のケースでは、関数を実行しているだけですが、何も返しません。

于 2012-06-29T12:45:03.507 に答える