2012-02-15 6 views
2

Я установка RegularExpressionValidator во время выполнения в моем контроле Aspx согласно нижеУстановки RegularExpressionValidator ValidationExpression во время выполнения

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

На странице, если я введу неверный почтовый индекс Я получаю сообщение «Invalid Zip Code», однако, если я тогда введу правильный почтовый индекс, ничего не произойдет, и сообщение останется «Недопустимый почтовый индекс».

Если я вручную установить выражение согласно ниже

<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" /> 

Он отлично работает. Что мне не хватает?

+1

Попробуйте установить значение из кода вместо этого, что должно работать ... –

+0

Что вы имеете в виду? Я не делаю этого с ValidationExpression = '<% = this.SettingManager.GetSettingValue ("ZipCodeValidationExpression")%>' –

+1

Это в разметке, я говорю в коде позади ... извините, раньше оговорился –

ответ

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> 
+0

Я использовал OnPreRender вместо Page_Load ... все работает. –

1

<%= не является допустимым выражением для этого. Используйте <%#, который правильно назовет SettingManager.GetSettingValue '. Если валидатор находится внутри элемента управления привязки данных вы не должны делать что-нибудь еще, в противном случае вам нужно вызвать метод DataBind

редактировать
Небольшой совет: проверить сгенерированный HTML и поиск validationexpression ,

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

Какой, очевидно, не тот выход, который вам нужен.

+1

'<% =', кажется, вообще не оценивается внутри строк 'validationexpression'. – Matt

Смежные вопросы