代码之家  ›  专栏  ›  技术社区  ›  Ed James

自定义控件不触发验证

  •  1
  • Ed James  · 技术社区  · 16 年前

    我已经编写了一个自定义ASP.net控件,它从LinkButton派生并重写Render()方法。我用它来替换我正在工作的站点中的ImageButtons,这样我们就不必为每个按钮都有一个图像。

    控件的代码(压缩)如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public class CustomButton : LinkButton
    {
        public string SpanCssClass { get; set; }
        protected override void Render(HtmlTextWriter writer)
        {
            if (!Visible)
            {
                return;
            }
    
            writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);
            writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID);
            writer.AddAttribute(HtmlTextWriterAttribute.Class, CssClass);
            string postback = string.IsNullOrEmpty(OnClientClick) ? "javascript:__doPostBack('" + UniqueID + "','');" : OnClientClick;
            writer.AddAttribute(HtmlTextWriterAttribute.Href, postback);
            writer.RenderBeginTag(HtmlTextWriterTag.A);
    
            writer.AddAttribute(HtmlTextWriterAttribute.Class, SpanCssClass);
            writer.RenderBeginTag(HtmlTextWriterTag.Span);
    
            writer.Write(Text);
    
            writer.RenderEndTag();
            writer.RenderEndTag();
        }
    }
    

    有人知道为什么这不会导致验证程序启动吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   internet man    16 年前

    PostBackOptions options = new PostBackOptions(this);
    options.PerformValidation = true;
    options.RequiresJavaScriptProtocol = true;
    
    string postback = string.IsNullOrEmpty(OnClientClick) ? this.Page.ClientScript.GetPostBackEventReference(options) : OnClientClick;
    
        2
  •  0
  •   Brian Mains    16 年前

    如果您想在CausesValidation为true时手动触发验证,可以调用Page\u Validate客户端方法来触发验证。我想需要一个参数,验证组,来验证。。。