C# 立即从codebehind添加并显示验证器

C# 立即从codebehind添加并显示验证器,c#,asp.net,validation,webforms,C#,Asp.net,Validation,Webforms,我有一个网页,有几个验证器和页面上的验证摘要。这些是在加载页面时设置的,因为它们与普通表达式和必填字段类似 我还有一些其他情况,当用户填写文本框时,系统必须在保存时检查它是否有效。然后,我想在摘要中显示一条附加消息以及最初创建的验证器,以表明条目无效 我尝试了以下操作,但保存时未显示任何内容。此方法在“保存”按钮单击开始时调用,用于向验证摘要添加消息并返回isvalid=false protected bool ValidProductCode() { bool lValid = fal

我有一个网页,有几个验证器和页面上的验证摘要。这些是在加载页面时设置的,因为它们与普通表达式和必填字段类似

我还有一些其他情况,当用户填写文本框时,系统必须在保存时检查它是否有效。然后,我想在摘要中显示一条附加消息以及最初创建的验证器,以表明条目无效

我尝试了以下操作,但保存时未显示任何内容。此方法在“保存”按钮单击开始时调用,用于向验证摘要添加消息并返回isvalid=false

protected bool ValidProductCode()
{
    bool lValid = false;

    if (!String.IsNullOrEmpty(txtProductCode.Text))
    {
        try
        {
            using (SqlConnection conn = new SqlConnection(GetConnection.GetConnectionString()))
            {

                DataSet ds = new DataSet();
                SqlCommand sqlComm = new SqlCommand("PL_ProductCodes_FillScreen", conn);
                sqlComm.Parameters.AddWithValue("@SiteID", ddlSiteId.SelectedValue);
                sqlComm.Parameters.AddWithValue("@ProductCode", txtProductCode.Text);
                sqlComm.Parameters.AddWithValue("@IsOntext", 1);

                sqlComm.CommandType = CommandType.StoredProcedure;

                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = sqlComm;

                da.Fill(ds);

                if (ds.Tables[0].Rows.Count != 0)
                {
                    lValid = true;
                }

            }
        }
        catch (SqlException ex)
        {
            ExceptionHandling.SQLException(ex, constPageID, constIsSiteSpecific);
        }
    }
    CustomValidator err = new CustomValidator();
        err.IsValid = false;
        err.ErrorMessage = "The product code entered is invalid";
        Page.Validators.Add(err);
    return lValid;
}
使用:

代码隐藏:

protected void ValidateProductCode(object source, ServerValidateEventArgs args)
{
    if (string.IsNullOrEmpty(args.Value))
    {
        args.IsValid = true;
    }
    else
    {
        try
        {
            using (SqlConnection conn = new SqlConnection(GetConnection.GetConnectionString()))
            using (SqlCommand sqlComm = new SqlCommand("PL_ProductCodes_FillScreen", conn))
            {
                sqlComm.Parameters.AddWithValue("@SiteID", ddlSiteId.SelectedValue);
                sqlComm.Parameters.AddWithValue("@ProductCode", txtProductCode.Text);
                sqlComm.Parameters.AddWithValue("@IsOntext", 1);

                sqlComm.CommandType = CommandType.StoredProcedure;

                SqlDataAdapter da = new SqlDataAdapter(sqlComm);
                DataSet ds = new DataSet();
                da.Fill(ds);

                args.IsValid = ds.Tables[0].Rows.Count != 0;
            }
        }
        catch (SqlException ex)
        {
            ExceptionHandling.SQLException(ex, constPageID, constIsSiteSpecific);
            args.IsValid = false;
        }
    }
}
标记:

<asp:CustomValidator ID="validProductCode" runat="server"
    ControlToValidate="txtProductCode"
    OnServerValidate="ValidateProductCode"
    ErrorMessage="The product code entered is invalid"
    Display="Dynamic"
/>


我尝试了这个例子,但没有成功。它确实命中了代码隐藏中的验证代码,但在保存时从未显示错误消息。它似乎需要说明当args无效时会发生什么。@connersz:您的存储过程是否引发错误?我更新了代码,将<代码> IsValid <代码> > <代码> false <代码> > <代码> catch >代码>块。@ CONNESSZ:唯一的其他改变是,该代码将认为空的产品代码是有效的;除了
CustomValidator
之外,您通常会向控件添加一个
RequiredFieldValidator
,以处理此问题。@connersz:另外,请记住验证是在服务器上运行的。页面将发回,然后验证将运行<代码>页面。IsValid将返回
false
,当页面返回浏览器时,将显示“无效产品代码”错误。