我在创建基于ASP.NET的ImageButton控件的新控件时遇到了一些问题。一切都按预期工作,除了在控件的OnInit覆盖中连接的单击处理程序。基本上,单击自定义图像按钮只刷新页面,永远不会命中处理程序。
现在,我知道这是愚蠢的我已经完成或者只是不理解,但我不能为我的生活弄清楚这一点。我在控件的事件处理问题上找到的所有文章,问题和论坛帖子都是针对子控件的,而不是从现有控件类型继承并具有自己的预定义处理程序的那些。
以下代码是我写的:
public class WebPaymentButton : ImageButton
{
public string DisabledImageUrl { get; set; }
public string TermsAcceptClass { get; set; }
protected override void OnPreRender(EventArgs e)
{
Page.ClientScript.RegisterClientScriptResource(typeof (WebPaymentButton), "PaymentModule.Scripts.WebPaymentButtonScript.js");
}
protected override void OnInit(EventArgs e)
{
CssClass = "WebPaymentButton";
if (!string.IsNullOrWhiteSpace(TermsAcceptClass))
{
Attributes["data-TermsClass"] = TermsAcceptClass;
}
if (!string.IsNullOrWhiteSpace(DisabledImageUrl))
{
Attributes["data-DisabledImageUrl"] = ResolveUrl(DisabledImageUrl);
}
Click += WebPaymentButton_Click;
base.OnInit(e);
}
private void WebPaymentButton_Click(object sender, ImageClickEventArgs e)
{
HttpContext.Current.Response.Redirect("http://dummy_payment_page_in_place_of_code", true);
}
}
我已经尝试在OnLoad中挂起处理程序,并在base.OnInit / OnLoad调用之后将其切换为运行。没有解决处理程序问题。有人能指出我正确的方向吗?
如果有帮助,这里是页面上按钮的标记:
<pm:WebPaymentButton runat="server" ImageUrl="~/pay-now.png" DisabledImageUrl="~/not-pay-now.png" TermsAcceptClass="TermsCheckbox" ID="MainPayButton" />
答案 0 :(得分:0)
您是否尝试覆盖OnClick
事件处理程序而不是连接到新的事件处理程序?
从Click += WebPaymentButton_Click
移除OnInit
行并删除WebPaymentButton_Click
功能,然后将以下代码添加到您的班级中:
protected override void OnClick(ImageClickEventArgs e)
{
base.OnClick(e);
HttpContext.Current.Response.Redirect("http://dummy_payment_page_in_place_of_code", true);
}