在运行时设置RegularExpressionValidator ValidationExpression

时间:2012-02-15 17:05:46

标签: asp.net regex user-controls

我在运行时在我的aspx控件中设置了一个RegularExpressionValidator,如下所示

 <asp:RegularExpressionValidator ID="revValue" runat="server" ControlToValidate="txtZipCode"
                    ValidationExpression='<%=this.SettingManager.GetSettingValue("ZipCodeValidationExpression")%>'
                    ErrorMessage="Invalid Zip Code." Display="Dynamic" />

在页面上,如果我输入无效的邮政编码,我会收到消息“无效的邮政编码”,但是,如果我输入有效的邮政编码,则没有任何反应,邮件仍为“邮政编码无效”。

如果我手动设置表达式如下

 <asp:RegularExpressionValidator ID="revValue" runat="server" ControlToValidate="txtZipCode"
                    ValidationExpression="^(\d{5}-\d{4}|\d{5}|\d{9})$|^([a-zA-Z]\d[a-zA-Z] \d[a-zA-Z]\d)$"
                    ErrorMessage="Invalid Zip Code." Display="Dynamic" />

工作正常。我错过了什么?

2 个答案:

答案 0 :(得分:3)

“代码隐藏”中的示例代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

public partial class Default3 : System.Web.UI.Page
{
    public static string GetErrorMessage()
    {
        return "Your Error Message";
    }

    public static string GetValidationExpression()
    {
        return @"\d+";
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            qw.ErrorMessage = GetErrorMessage();
            qw.ValidationExpression = GetValidationExpression();
        }
    }
}

ASPX页面中的示例代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:TextBox ID="txt1" runat="server">
    </asp:TextBox>
    <asp:RegularExpressionValidator ID="qw" runat="server" ControlToValidate="txt1" Display="Dynamic"></asp:RegularExpressionValidator>
    <asp:Button ID="ed" runat="server" Text="ed" />
    </form>
</body>
</html>

答案 1 :(得分:2)

<%=不是执行此操作的有效表达式。使用<%#即可正确调用SettingManager.GetSettingValue'。如果验证器在数据绑定控件内,则不必执行任何其他操作,否则需要调用DataBind方法

修改
一个小提示:检查生成的html并搜索validationexpression

validationexpression = "<%=this.SettingManager.GetSettingValue(\"ZipCodeValidationExpression\")%>"

这显然不是你需要的输出。