【问题标题】:Adding and displaying a validator immediately from the codebehind立即从代码隐藏添加和显示验证器
【发布时间】:2014-07-23 16:14:35
【问题描述】:

我有一个网页,其中包含多个验证器和页面上的验证摘要。这些是在页面加载时设置的,因为它们只是普通表达式和必填字段之类的东西。

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

我尝试了以下方法,但保存时没有显示任何内容。此方法在保存按钮单击开始时调用,应该在验证摘要中添加一条消息并返回 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;
}

【问题讨论】:

    标签: c# asp.net validation webforms


    【解决方案1】:

    使用a CustomValidator:

    代码隐藏:

    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:您的存储过程是否引发了错误?我已更新代码以在 catch 块中将 IsValid 设置为 false。
    • @connersz:唯一的其他变化是此代码将认为空产品代码有效;除了 CustomValidator 之外,您通常还会向控件添加 RequiredFieldValidator 来处理此问题。
    • @connersz:另外,请记住验证正在服务器上运行。该页面将回发,然后验证将运行。 Page.IsValid会返回false,当页面渲染回浏览器时,会显示“invalid product code”错误。
    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多