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" />