我有一个 aspx web 应用程序,其中存在 1 个 aspx 页面和 1 个 web 用户控件。我在 aspx 页面中添加了 4 个用户控件实例。用户控件中有一个删除按钮,用于从 aspx 页面中删除控件。如果我单击用户控件的删除按钮,如何从 aspx 页面中找到单击了哪个用户控件的删除按钮。请告诉我解决方案...
提前致谢 :)
我有一个 aspx web 应用程序,其中存在 1 个 aspx 页面和 1 个 web 用户控件。我在 aspx 页面中添加了 4 个用户控件实例。用户控件中有一个删除按钮,用于从 aspx 页面中删除控件。如果我单击用户控件的删除按钮,如何从 aspx 页面中找到单击了哪个用户控件的删除按钮。请告诉我解决方案...
提前致谢 :)
我会在用户控件中添加一个事件并在后面的代码中捕获该事件。这是一个例子:
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);
}
}
最后结果:
上面的示例生成以下网页。单击删除按钮时,该控件将消失:
祝你好运!!
如果您尝试在客户端执行此操作,则可以像这样引用 ID:
var removeButtonId = "<%=removeButton.ClientID %>";
如果您已经连接了一个点击事件,您可以从sender
参数中获取它,如下所示:
void removeButton_Click(object sender, EventArgs e)
{
Button removeButton = sender as Button;
string id = removeButton.ID;
}
一个简单的方法:让用户控件实现一个 RemoveClicked 事件。然后,当单击删除按钮时,在按钮单击事件处理程序中,触发 RemoveClicked 事件。该页面可以知道删除请求来自哪个用户控件。如果您愿意,您甚至可以通过事件参数传递按钮。对于所有 4 个用户控件,该页面也必须附加到此事件,仅供参考。
此建议假定您正在寻找服务器端解决方案,而不是客户端解决方案。
HTH。