自定义控件不会触发验证

时间:2010-06-04 10:22:54

标签: c# asp.net custom-controls

我编写了一个自定义的ASP.net控件,它来自LinkBut​​ton并覆盖了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();
    }
}

有谁知道为什么这不会导致验证者开火?

我的印象是,将LinkBut​​ton中的所有其他方法保留为未覆盖状态会使所有其他功能保持不变!

2 个答案:

答案 0 :(得分:1)

问题是你正在生成自己的脚本,允许asp.net为你做这个,它应该更好。这样的事情会更好。

PostBackOptions options = new PostBackOptions(this);
options.PerformValidation = true;
options.RequiresJavaScriptProtocol = true;

string postback = string.IsNullOrEmpty(OnClientClick) ? this.Page.ClientScript.GetPostBackEventReference(options) : OnClientClick;

答案 1 :(得分:0)

好吧,如果你想在CausesValidation为true时手动触发验证,你可以调用Page_Validate客户端方法来触发验证。我认为验证组需要一个参数来验证......

HTH。