面板的OnClick事件在转发器内部

时间:2017-02-03 04:57:08

标签: c# asp.net

<asp:Panel id="contactsListContainer" runat="server">
        <asp:Repeater ID="contactsListRepeater" runat="server">
            <ItemTemplate>
                <asp:Panel CssClass="contactsList" ID="contactList" runat="server" OnClick="contactLink_Click" CommandArgument='<%# ((AddressBook.Employee)Container.DataItem).Id %>' CausesValidation="false">
                    <asp:Label ID="lblContactName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>'></asp:Label>
                    <asp:Label ID="lblContactEmail" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Email") %>'></asp:Label>
                    <asp:Label ID="lblContactMobile" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MobileNumber") %>'></asp:Label>
                </asp:Panel>
            </ItemTemplate>
        </asp:Repeater>
    </asp:Panel>

我想为联系人列表面板添加onclick事件。我该如何添加它。

这是单击该面板时要执行的代码。

 protected void contactLink_Click(object sender, EventArgs e)
    {
        contactsForm.Style.Add("display", "none");
        detailsContainer.Style.Add("display", "block");
        LinkButton btn = (LinkButton)sender;
        SelectEmpId = int.Parse(btn.CommandArgument);
        LinkButton contactListLinkButton = getSelctedLinkButton();
        contactListLinkButton.Style.Add("background-color", "#CEE7F2");
        Employee employee = GetEmployee(SelectEmpId);
        lblDetailName.Text = employee.Name;
        lblDetailAddress.Text = employee.Address;
        lblDetailMobile.Text = employee.MobileNumber;
        lblDetailLandline.Text = employee.LandLineNumber;
        lblDetailEmail.Text = employee.Email;
        lblDetailWebsite.Text = employee.Website;
        lblDetailAddress.Text = employee.Address;
    }

2 个答案:

答案 0 :(得分:0)

Asp.NET OnClick没有Panel事件,请改为尝试:

您可以参考此解决方案:https://stackoverflow.com/a/20540854/4779385

希望它有所帮助!

答案 1 :(得分:0)

<asp:Panel>没有您可以处理的Click事件。

虽然您可能需要做一些CSS工作,但一个好方法是将您希望在服务器上可点击的内容包装在HTML锚点中,即

<a id="anchor" runat="server">
  .. your stuff
</a>

您可以将Clicked处理程序添加到转发器/网格的ItemDataBound事件内的锚点,并指定您的contactLink_Click处理程序是处理转发器/网格中所有锚点/面板的事件的处理程序。

(此示例来自转发器,适用于GridView)

void contactsListRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    var item = e.Item;

    if (item.ItemType == ListItemType.AlternatingItem || item.ItemType == ListItemType.Item)
    {
        var anchor = item.FindControl("anchor") as HtmlAnchor;
        anchor.ServerClick += contactLink_Click;
    }
}

请注意,sender将成为引发点击事件的锚点,因此您可以从sender深入查看正确的子控件(如果需要)