我有 2 个事件要从用户控件触发回其父级。“UserSelected”和“NoUsersSelected”
一个在用户被选中时触发,另一个在所有用户被删除时触发。
我的问题是“UserSelected”有效,但“NoUsersSelected”失败......在下面的代码片段中,我已经注释了失败的行。
更新: 当我评论与第一个事件处理程序相关的所有代码时,第二个事件处理程序开始工作。
这是我的孩子(用户)控件上的代码:
public event EventHandler UserSelected;
public event EventHandler NoUsersSelected;
protected virtual void onUserSelected(System.EventArgs e)
{
if (UserSelected != null) UserSelected(this, e);
}
protected virtual void onNoUsersSelected(System.EventArgs e)
{
**###** PROBLEM ! - NoUsersSelected is always null so doesn't fire event **###**
if (NoUsersSelected != null) NoUsersSelected(this, e);
}
为了引发事件,我使用了 GridView TemplateField 中的按钮:
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnSelect" CommandArgument='<%# Eval("UserID") %>' CommandName="SelectUser" ToolTip="Select User" runat="server" UseSubmitBehavior="false" CssClass="GridBtn_Select" CausesValidation="false" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnDelete" CommandArgument='<%# Eval("UserID") %>' CommandName="DeleteUser" ToolTip="Delete User" runat="server" OnClientClick="javascript:if(!confirm('Are you sure?')) return false;" UseSubmitBehavior="false" CssClass="GridBtn_Delete" CausesValidation="false" />
</ItemTemplate>
</asp:TemplateField>
以下是这些按钮背后的代码:
if (e.CommandName == "SelectUser")
{onUserSelected(System.EventArgs.Empty);}
和...
if (e.CommandName == "DeleteUser")
{ //this is where I remove the user from the grid...
if (gridUsers.Rows.Count < 1)
{onNoUsersSelected(System.EventArgs.Empty);}
.
在承载用户控件的父页面上:
protected void Page_Load(object sender, EventArgs e)
{
//Bind to the event on child control
GridAdvertiserUsers.UserSelected += UserSelected_EventHandler;
GridAdvertiserUsers.NoUsersSelected += NoUsersLinked_EventHandler;
}
以及事件调用的函数:
void UserSelected_EventHandler(object sender, EventArgs e)
{ //do stuff here }
void NoUsersLinked_EventHandler(object sender, EventArgs e)
{ //Do other stuff }
更新:
调用 onUserSelected 时,两个事件似乎都正确连接了它们的方法
但是当 onNoUserSelected 被调用时,它们都是空的: