我有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时,它们都是null:
答案 0 :(得分:1)
这一行:
GridAdvertiserUsers.NoUsersSelected += NoUsersLinked_EventHandler;
应确保此评论为false:
**###** PROBLEM ! - NoUsersSelected is always null so doesn't fire event **###**
if (NoUsersSelected != null) NoUsersSelected(this, e);
但是当你以不同的方式体验它时,当执行这两行时必定存在问题。使用跟踪和/或调试来查找。
int thisPage = this.GethashCode(); // view in Debugger and make a note
GridAdvertiserUsers.NoUsersSelected += NoUsersLinked_EventHandler;
....
int thisPage = this.GethashCode(); // view in Debugger, should be the same id
if (NoUsersSelected != null) NoUsersSelected(this, e);