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