2

我有一个 aspx web 应用程序,其中存在 1 个 aspx 页面和 1 个 web 用户控件。我在 aspx 页面中添加了 4 个用户控件实例。用户控件中有一个删除按钮,用于从 aspx 页面中删除控件。如果我单击用户控件的删除按钮,如何从 aspx 页面中找到单击了哪个用户控件的删除按钮。请告诉我解决方案...

提前致谢 :)

4

3 回答 3

7

我会在用户控件中添加一个事件并在后面的代码中捕获该事件。这是一个例子:

Default.aspx Web 表单:

注册用户控件:

<%@ Register TagPrefix="so" TagName="UserControl" Src="~/WebUserControl.ascx" %>

上述控制的4个实例。请注意,我们正在处理下面定义的 OnRemoving 事件:

    <so:UserControl ID="UserControl1" runat="server" Title="Control 1" OnRemoving="UserControl1_Removing" />
    <so:UserControl ID="UserControl2" runat="server" Title="Control 2" OnRemoving="UserControl2_Removing" />
    <so:UserControl ID="UserControl3" runat="server" Title="Control 3" OnRemoving="UserControl3_Removing" />
    <so:UserControl ID="UserControl4" runat="server" Title="Control 4" OnRemoving="UserControl4_Removing" />

Default.aspx 后面的代码:

在后面的代码中,我处理了每个控件的 OnRemoving 事件:

protected void UserControl1_Removing(object sender, EventArgs e)
{
    WebUserControl ctrl = (WebUserControl)sender;
    ctrl.Visible = false;
}
protected void UserControl2_Removing(object sender, EventArgs e)
{
    WebUserControl ctrl = (WebUserControl)sender;
    ctrl.Visible = false;
}
protected void UserControl3_Removing(object sender, EventArgs e)
{
    WebUserControl ctrl = (WebUserControl)sender;
    ctrl.Visible = false;
}
protected void UserControl4_Removing(object sender, EventArgs e)
{
    WebUserControl ctrl = (WebUserControl)sender;
    ctrl.Visible = false;
}

用户控制 Web 表单:

Web 用户控件包括一个“删除”按钮:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>

<fieldset>
  <legend><%=Title %></legend>
  <asp:Button ID="Button_Remove" runat="server" Text="Remove" OnClick="Button_Remove_Click" />
</fieldset>

背后的用户控制代码:

最后,这里是如何为用户控件编写事件代码:

public partial class WebUserControl : System.Web.UI.UserControl
{
    // the event delegates may listen for
    public event EventHandler Removing;
    public string Title { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void Button_Remove_Click(object sender, EventArgs e)
    {
        // raise the event for attached delegates
        if (Removing != null)
            Removing(this, EventArgs.Empty);
    }
}

最后结果:

上面的示例生成以下网页。单击删除按钮时,该控件将消失:

完成品

祝你好运!!

于 2011-01-28T14:14:25.027 回答
1

如果您尝试在客户端执行此操作,则可以像这样引用 ID:

var removeButtonId = "<%=removeButton.ClientID %>";

如果您已经连接了一个点击事件,您可以从sender参数中获取它,如下所示:

void removeButton_Click(object sender, EventArgs e)
{
    Button removeButton = sender as Button;
    string id = removeButton.ID;
}
于 2011-01-28T13:19:04.173 回答
0

一个简单的方法:让用户控件实现一个 RemoveClicked 事件。然后,当单击删除按钮时,在按钮单击事件处理程序中,触发 RemoveClicked 事件。该页面可以知道删除请求来自哪个用户控件。如果您愿意,您甚至可以通过事件参数传递按钮。对于所有 4 个用户控件,该页面也必须附加到此事件,仅供参考。

此建议假定您正在寻找服务器端解决方案,而不是客户端解决方案。

HTH。

于 2011-01-28T13:51:43.013 回答