我有一个用户控件,它被添加到另一个用户控件中。嵌套的用户控件由GridView,图像按钮和链接按钮构成。嵌套的用户控件根据绑定到GridView的结果作为集合对象添加到外部控件。
我遇到的问题是我的链接按钮不起作用。我点击它,事件不会触发。甚至没有达到断点。由于嵌套用户控件被添加了很多次,我将图像按钮设置为具有唯一ID以及链接按钮。虽然图像按钮可以正常使用JavaScript。链接按钮需要在后面的代码中触发事件,但尽管我付出了很多努力,但我无法使其工作。我动态地将链接按钮添加到控件。以下是我正在使用的相关代码:
public partial class ucCustomerDetails : System.Web.UI.UserControl
{
public event EventHandler ViewAllClicked;
protected override void CreateChildControls( )
{
base.CreateChildControls( );
string strUniqueID = lnkShowAllCust.UniqueID;
strUniqueID = strUniqueID.Replace('$','_');
this.lnkShowAllCust.ID = strUniqueID;
this.lnkShowAllCust.Click += new EventHandler(this.lnkShowAllCust_Click);
this.Controls.Add(lnkShowAllCust);
}
protected override void OnInit (EventArgs e)
{
CreateChildControls( );
base.OnInit(e);
}
protected override void OnLoad(EventArgs e)
{
base.EnsureChildControls( );
}
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
CreateChildControls( );
}
}
protected void lnkShowAllCust_Click(object sender, EventArgs e)
{
this.OnCustShowAllClicked(new EventArgs ( ));
}
protected virtual void OnCustShowAllClicked(EventArgs args)
{
if (this.ViewAllClicked != null)
{
this.ViewAllClicked(this, args);
}
}
}
过去3天我一直在处理这个问题并且没有成功,我确实需要一些帮助。
有人可以帮助我吗?
答案 0 :(得分:2)
我的LinkButton没有触发它的Click事件,原因是我将其CausesValidation属性设置为True。如果您不希望链接验证表单,请务必将其设置为False。
答案 1 :(得分:1)
尝试将您的点击事件添加到linkbutton标记:
<asp:LinkButton runat="server" OnClick="linkShowAllCust_Click" />
或将其添加到您的Page_Load:
Page_Load(object sender, EventArgs e)
{
this.lnkShowAllCust.Click += new EventHandler(this.lnkShowAllCust_Click);
}
答案 2 :(得分:0)
gridview中的usercontrol?如果是,则在gridview的onrowcreated事件上注册事件处理程序。
答案 3 :(得分:0)
您似乎有一个viewstate问题。因为在加载视图状态时控件不存在,所以应用程序不知道如何挂接要触发的事件。以下是解决此问题的方法。
通过在loadviewstateevent被触发后立即加载控制树,您实际上可以使您的应用正常工作。如果你覆盖loadviewstate事件,调用mybase.loadviewstate,然后把你自己的代码重新生成后面的控件,这些控件的值将在页面加载时可用。在我的一个应用程序中,我使用viewstate字段来保存可用于重新创建这些控件的ID或数组信息。
Protected Overrides Sub LoadViewState(ByVal savedState As Object)
MyBase.LoadViewState(savedState)
If IsPostBack Then
CreateMyControls()
End If
End Sub
答案 4 :(得分:0)
我有同样的问题。我在添加控件的页面上有viewstate =“false”。 (在aspx页面上)