使用Page.IsValid集成自定义控件控件验证

时间:2011-07-06 10:50:31

标签: asp.net validation controls

我创建了一个自定义服务器控件。到目前为止,这个控件在网页中呈现了一些html。在提交页面时,我需要获取在服务器控件的文本框中输入的值,并调用一些web服务来验证用户的输入。我不想在使用此控件的页面后面的代码中编写此代码。我希望所有验证都写在服务器控件本身中,如果验证失败,则Page.IsValid应设置为false。如果服务器控件中的用户输入值有效,则Page.IsValid将为true。

我想要实现与google recaptcha相同的功能。用户使用此控件的所有操作都是在页面中使用控件。用户输入的值是正确的还是不正确的是在控件本身和页面后面的代码中处理,只有Page.IsValid。以下是谷歌上解释此内容的页面

http://code.google.com/apis/recaptcha/docs/aspnet.html

我也使用了google recaptcha,它按预期工作。我也希望为我的服务器控件构建相同类型的功能,如果可能,请提供帮助。

2 个答案:

答案 0 :(得分:1)

感谢您回答问题。我找到了解决方案。这是服务器控件的完整代码。诀窍是实施IValidator。它给了我们两个属性和一个metod。 ErrorMessage和IsValid属性以及Validate方法。我在Validate方法中编写了所有验证代码并设置了this.IsValid。这解决了这个问题。

[ToolboxData("<{0}:MyControl runat=server></{0}:MyControl>")]
public class MyControl : WebControl, IValidator
{
    protected override void RenderContents(HtmlTextWriter output)
    {
        //Render the required html
    }

    protected override void Render(HtmlTextWriter writer)
    {
        this.RenderContents(writer);
    }

    protected override void OnInit(EventArgs e)
    {
        Page.Validators.Add(this);
        base.OnInit(e);
    }

    public string ErrorMessage
    {
        get;
        set;
    }

    public bool IsValid
    {
        get;
        set;
    }

    public void Validate()
    {
        string code = Context.Request["txtCode"];
        this.IsValid = Validate(code);//this method calls the webservice and returns true or false
        if (!this.IsValid)
        {
            ErrorMessage = "Invalid Code";
        }
    }
}

答案 1 :(得分:0)

您可以将验证程序合并到服务器控件中。它需要一个服务器验证方法来调用Web服务。

最终结果将是您放在页面上的服务器控件,不需要其他验证器。如果您的控件无法验证其内容,则page.isvalid将为false。

西蒙