0

コードビハインドからページを作成しています。ボタンを追加し、その属性を次のように設定します。

var Button1 = new Button();
Button1.Text = "Purge Course Comments";
Button1.Attributes.Add("OnClientClick", "javascript: Purge();");
pageButtons.Controls.Add(Button1);

ボタンは「pageButtons」という div に追加されています。プログラムをテストすると、ボタンは正常に画面に表示されますが、クリックしてもブラウザがポストバックする以外は何も起こりません。

このページはコード ビハインドから構築する必要があるため、次のようにボタンをページに直接追加することはできません (これでうまくいきます)。

<asp:Button ID="Button1" runat="server" Text="Close Window" OnClientClick="Purge;"/>

基本的に、コード ビハインドから関数を呼び出せるようにする必要がありますが、うまくいきません。誰かが私が間違っていることを教えてもらえますか?

編集:私は Stackoverflow で同様の質問を見てきましたが、この状況で私にとって有効な回答を持つ単一の質問が見つかりません。

編集:わかりやすくするために、ページで定義したパージ関数を次に示します。

function PurgeCourse() {
        strCourseId = getQueryString("Id");
        if (strCourseId == "") {
            strCourseId = getQueryString("CourseId");
        }
        window.open("Purge.aspx?id=" + strCourseId);
        parent.window.close();
    }

上記の例のように、手動でボタンをページに追加するだけで機能します。ただし、コードビハインドから呼び出すことはできないようです。

編集:私は以下からの提案を試みましたが、今私のコードは次のようになります:

var Button1 = new Button();
Button1.Text = "Purge Course Comments";
Button1.OnClientClick = "javascript: Purge();";
pageButtons.Controls.Add(Button1);

残念ながら、これもうまくいきませんでした。ただし、手動でボタンをページに追加し、OnClientClick 属性を設定して Purge() を呼び出すと、関数が機能することを繰り返します。コードビハインドから関数にアクセスできないようですが、理由がわからないのでイライラします。これは、関数と div とコード ビハインドのみを含む小さなテスト ページです。問題がどこにあるのかわかりません。

編集:私は別のことを試しました.それがうまくいくかどうかを確認するためだけです. 私は次のことをしました:

Button1.OnClientClick = "javascript: parent.window.close();";

そしてこれは機能したので、ボタンは少なくともインライン JavaScript コードを使用できます。コードビハインドからページにある私の関数を「見ている」だけではありません。

4

1 に答える 1

1

OnClientClick出力に属性として追加しないでください。これはサーバー側の Button クラスのプロパティなので、単純に

Button1.OnClientClick = "javascript: PurgeCourse();";

<asp:Button runat="server" onclientclick="javascript: PurgeCourse();" />

クライアント側では、これはonclick属性にレンダリングされます。

<button onclick="javascript: PurgeCourse();" />

通常、イベントの処理を停止するために、これはevent.preventDefault()(Microsoft は最近まで気に入らなかった/入手できなかった)、またはとしても知られていreturn falseます。したがって、関数は常に false を返すか、

Button1.OnClientClick = "javascript: PurgeCourse(); return false;";

または、関数の値を返すことで、送信を終了するか続行するかを決定できます。

Button1.OnClientClick = "javascript: return PurgeCourse();";

<script type="text/javascript">
function PurgeCourse () {
   return false; // or return true;
}
</script>
于 2013-09-04T15:35:54.777 に答える