4

それ自体が単一の UpdatePanel を持つ UserControl の単一のインスタンスを持つ Page があります。UpdatePanel 内には、いくつかの Button コントロールがあります。これらのコントロールの Click イベントは、コード ビハインドの UserControl の Init イベントに関連付けられています。

最初に押したボタンの Click イベントを毎回取得しますが、問題ありません。その後、1 つのボタン (SearchButton) の Click イベントのみを取得し、残りは無視されます。以下のコントロールのコードを含めました。簡潔にするために、クリック イベント ハンドラー メソッドを除外しましたが、それらはすべて標準の「void Button_Click(object sender, EventArgs e)」の種類です。何か案は?

<asp:UpdatePanel ID="PickerUpdatePanel" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Panel ID="Container" runat="server">
            <div>
                <asp:TextBox ID="PickerResults" runat="server" style="margin-right: 3px;" SkinID="Plain" />
                <asp:Image
                    ID="LaunchPopup" runat="server" ImageUrl="~/images/icons/user_manage.png" 
                    ImageAlign="Top" BorderColor="#294254" BorderStyle="Dotted" BorderWidth="1px" 
                    Height="20px" Width="20px" style="cursor: pointer;" />
            </div>
            <asp:Panel ID="PickerPanel" runat="server" DefaultButton="OKButton" CssClass="popupDialog" style="height: 227px; width: 400px; padding: 5px; display: none;">
                <asp:Panel runat="server" id="ContactPickerSearchParams" style="margin-bottom: 3px;" DefaultButton="SearchButton">
                    Search: <asp:TextBox ID="SearchTerms" runat="server" style="margin-right: 3px;" Width="266px" SkinID="Plain" />
                    <asp:Button ID="SearchButton" runat="server" Text="Go" Width="60px" SkinID="Plain" />
                </asp:Panel>
                <asp:ListBox ID="SearchResults" runat="server" Height="150px" Width="100%" SelectionMode="Multiple" style="margin-bottom: 3px;" />
                <asp:Button ID="AddButton" runat="server" Text="Add >>" style="margin-right: 3px;" Width="60px" SkinID="Plain" />
                <asp:TextBox ID="ChosenPeople" runat="server" Width="325px" SkinID="Plain" />
                <div style="float: left;">
                    <asp:Button ID="AddNewContact" runat="server" SkinID="Plain" Width="150px" Text="New Contact" />
                </div>
                <div style="text-align: right;">
                    <asp:Button ID="OKButton" runat="server" Text="Ok" SkinID="Plain" Width="100px" />
                </div>
                <input id="SelectedContacts" runat="server" visible="false" />
            </asp:Panel>
            <ajax:PopupControlExtender ID="PickerPopEx" runat="server" PopupControlID="PickerPanel" TargetControlID="LaunchPopup" Position="Bottom" />
        </asp:Panel>
   </ContentTemplate>
   <Triggers>
        <asp:AsyncPostBackTrigger ControlID="AddButton" EventName="Click" />
        <asp:AsyncPostBackTrigger ControlID="SearchButton" EventName="Click" />
        <asp:AsyncPostBackTrigger ControlID="AddNewContact" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

public partial class ContactPicker : System.Web.UI.UserControl
{
    protected void Page_Init(object sender, EventArgs e)
    {
        SearchButton.Click += new EventHandler(SearchButton_Click);
        AddButton.Click += new EventHandler(AddButton_Click);
        OKButton.Click += new EventHandler(OKButton_Click);
    }

    // Other code left out
}
4

3 に答える 3

4

ボタンの定義に UseSubmitBehavior="false" を追加すると、問題が解決したようです。最初のボタンのクリックが機能した理由はまだわかりません。

于 2008-10-07T22:03:45.097 に答える
1

これの最も可能性の高い理由は、.Net がそのコントロールの変更に対して生成するクライアント ID です。これらは動的に割り当てられ、ポストバックと部分ポストバックの間で変化する可能性があります。

コントロールがパネルに動的に追加されている場合、ボタンの ID がポストバック間で異なる可能性があり、.Net がクリック イベントをコード内の正しいイベント ハンドラーに関連付けることができなくなります。

于 2008-11-20T12:19:49.890 に答える
0

私の場合、プロパティを使用するイベントハンドラーLinkButton内にありました。dgPatients_ItemDataBoundPostBackUrl

LinkButtonを に変更した瞬間HyperLink、問題はなくなりました。

于 2010-11-22T18:16:09.200 に答える