10

マスター ページ、複数の RequiredFieldValidators、および Web Toolkit オートコンプリート エクステンダーを使用するページがあります。次のコードは、ページの最小限の部分のみを示しています。

<%@ Page Language="C#" 
    AutoEventWireup="true"  
    CodeFile="Login.aspx.cs" 
    MasterPageFile="~/master.master" 
    Inherits="Login" %>

<asp:Content id="Content1" 
    contentplaceholderid="ContentPlaceHolder1" 
    runat="server">
    <asp:UpdatePanel ID="pnlUpdate" runat="server">
        <ContentTemplate>
            <div>
                <asp:ImageButton class="submitButton" 
                    imageurl="images/button_submit.gif" 
                    id="btnSubmit" 
                    runat="server" 
                    onclick="btnSubmit_ServerClick"/>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

分離コード:

protected void btnSubmit_ServerClick
      (object sender, ImageClickEventArgs e)
{
    //breakpoint here does not get hit
}

<form runat="server">タグはマスターページにあります。上記のコードは onclick イベントを発生させません。マスター ページを削除してフォーム タグをページに追加すると、機能します。マスター ページのフォーム タグはサポートされていませんか、それとも何らかの形で機能するはずですか? 代替テキスト http://digitalcopy.warnerbros.com/images/mainmenu.gif?provider=00079&disc=03403AAA-1D20-47F2-91FA-5EE632832659

4

16 に答える 16

12

ImageButton が検証をトリガーしないかどうかを確認することもできます。その場合は、CausesValidation プロパティを false に設定します (もちろん、それが理にかなっている場合)。

于 2009-04-25T05:52:57.053 に答える
4

私の解決策は、ImageButton の CausesValidation を false に設定することでした。

于 2013-04-09T21:03:13.590 に答える
4

同様の問題がありました(別のシナリオ)。使用するPage.RegisterRequiresRaiseEvent(ImageButton)と、onclick イベントが発生し始めました。なぜ私はそれをする必要があったのですか?知らない。

于 2009-08-25T22:56:07.080 に答える
2

画像ボタンにも同様の問題があり、根本的な原因が見つかりました。あなたが使用している

" ib.ID = i + ":" + j;"

の ID としてImageButton" :" を使用するのは違法な名前です。プログラムで作成しているため、ASP.NET で作成できます。

実行時にページの HTML ソースを見ると、特殊文字が無視されるか、" _" に置き換えられていることがわかります。したがって、ページは正しいコントロールを見つけることができないため、イベントは発生しません。プレーンテキストで名前を変更してみてください。イベントが発生します。

于 2009-09-16T21:41:04.287 に答える
2

ib.ID = i + ":" + j;

に変更する必要があります

ib.ID = i.toString()+":"+j.toString();

それでもうまくいかない場合は、StringBuilder を使用して ID を構築し、後で ib.ID プロパティに割り当ててみてください。

于 2011-03-07T18:22:04.510 に答える
1

これは私のために働いた解決策です

データ バインドされたコントロールを介してバインドしている場合は、OnClick 属性の代わりに OnCommand 属性を使用します。

于 2016-08-22T10:31:04.323 に答える
0

onClickではなくOnClickを使用してください

更新パネルがポストバックを台無しにしている可能性があります。UpdatePanelなしで試して、それが原因かどうかを確認してください。

于 2009-09-16T21:48:04.850 に答える
0

あなたが提供したコードから、あなたは<asp:scriptmanager>あなたのページからを逃しているようです。次のいずれかを実行する必要があります。

  1. ページ上<asp:scriptmanagerproxy><asp:scriptmanager>マスターページ上にあります。
  2. あなた<asp:scriptmanager>のページにあり<asp:scriptmanager>、マスターページにはありません。

<form>個人的には、マスターページにタグを付けることをお勧めしますが、それは個人的な好みです。

于 2009-04-25T03:04:45.430 に答える
0

UpdatePanel を取り出して、それが機能するかどうかをいつでも試すことができます。私は通常、UpdatePanel なしで開始し、すべてが思いどおりに機能するようにしてから、UpdatePanel を追加して、原因となるものをデバッグします。

MasterPage のフォームは私にとっては機能するので、@Keltex で言及されている ScriptManager/ScriptManagerProxy が問題になる可能性がありますが、時々それらを忘れてしまい、通常はそれでうまくいきます。

UpdatePanel を使用すると、ボタンのクリック イベントが Javascript を介して処理されるため、FireBug または同等のもの (ブラウザーによって異なります) を取得して、実際に何が起こっているかを追跡できます。検証でトリップしていて、表示されませんか? どこかに JS エラーがありますか (Control Toolkit は常に完璧であるとは限りません)? ページが実際にポスト バックされ、イベント ハンドラーにアクセスしていないだけですか?

于 2009-04-25T04:01:41.113 に答える
0

私の Web ページでは、updatepanel に含まれるテーブル内に imagebuttons を動的に作成しています。ボタンは次のコードで作成されます。

for (int i = 0; i < 15; i++)
    {
        TableRow tr = new TableRow();
        for (int j = 0; j < 20; j++)
        {
            TableCell tc = new TableCell();
            ImageButton ib = new ImageButton();
            ib.Click += new ImageClickEventHandler(ImageButton1_Click);
            ib.ImageUrl = "../img/defaultCell.jpg";
            ib.ID = i + ":" + j;
            tc.Controls.Add(ib);
            tc.Width = 25;
            tc.Height = 25;
            tr.Cells.Add(tc);
        }
        GameTable.Rows.Add(tr);
    }

}

画像ボタンはクリック イベントをトリガーしません。ただし、「ib.ID = ...」という行がコメント アウトされている場合は、コメント アウトされています。その1回の変更ですべての問題が解決するようです。理由がわかりません。誰かがこれを説明し、ボタンIDを設定する機能を維持するイベントをトリガーする方法を教えてくれれば、とても感謝しています

于 2009-06-02T19:15:53.043 に答える
0

OnClickImageButton のイベントが発生しないという同じ問題がありました。しかし、実際の問題は、フォームレベルで、私が持っていた onSubmit="return false;"

于 2013-04-04T11:59:39.697 に答える
0

イベントハンドラーを作成して割り当てた後にIDを再割り当てしたという事実と関係があるのではないかと思いますか?

IDを割り当てる必要さえありますか?- とにかく、これはあなたのために行われますか?- 「ib.ID = i + ":" + j;」を削除して真

于 2009-07-23T21:12:23.690 に答える
0

上記の提案がどれもうまくいかなかったので、OnInit() でボタンの作成を呼び出して、もう一度試してみました。これで問題が修正され、OnClick イベントが発生するようになりました。

于 2015-05-20T11:15:24.940 に答える
0

コントロールを runat=server の形式でどこかに配置する必要があります。マスター ページまたは .aspx ファイルに配置できます。マスターページのフォームタグが runat=server であることを再確認してください

AutoEventWireup は、使用している構文を許可するプロパティです。マスター ページ、Web フォームの設定を再確認してください。web.config でも設定できます。

それがうまくいかない場合は、いつでも明示的にコーディングできます(私が好む)

<script runat=server>

protected override void OnInit(EventArgs e)
    {
        btnSubmit.Click += delegate(object sender, EventArgs e1)
        {

        };
        base.OnInit(e);
    }

</script>

UpdatePanel は、サーバー側のイベントの発生にも干渉する可能性があるため、UpdatePanel なしで試してみてください。そして、マスターページに ScriptManager があると確信しています

于 2009-04-25T01:25:12.987 に答える