【问题标题】:Using CustomValidator control使用 CustomValidator 控件
【发布时间】:2012-04-18 22:11:04
【问题描述】:

我们知道 CustomValidator 控件通常会根据一些算术验证检查用户的输入。

我的网络表单中有一个文本框。它的文本不是来自用户的输入,而是来自数据库。

MembershipUser user = Membership.Providers["SqlMembershipProvider"].GetUser(userName);
TextUserName.Text = AntiXss.HtmlEncode(user.UserName);

我的目标是使用某种验证器来检查它是否合适。如果不是,则在文本框中更改它并再次验证。 怎么做?

谢谢。

更新代码:

    protected void ValidateUser()
    {
        string UserNameCreated = TextUserName.Text;
        Match match = Regex.Match(UserNameCreated, @"^[a-zA-Z0-9]{6,}$",
    RegexOptions.IgnoreCase);
    }

     <td class="style4">
            <asp:TextBox ID="TextUserName" runat="server"></asp:TextBox>
        </td><td><asp:CustomValidator ID="CustomValidatorUser" runat="server" ControlToValidate="TextUserName"
                                ErrorMessage="Minimum of 6 (six) alphanumeric characters." 
                OnServerValidate="ValidateUser" Display="Dynamic"
                                ValidateEmptyText="True" ></asp:CustomValidator></td>

【问题讨论】:

  • 验证器的目的只是验证用户输入。您可能想要使用某种正则表达式。您应该验证输入之前将其存储在数据库中。
  • 你可以用这个模式来做。但是我的情况需要我在显示文本后检查它。
  • 您尚未显示您的 CustomValidator。你实际上有什么问题,问题是什么?如果您将TextUserName.Text 设置为当前用户的UserName 并且他能够更改它,那么提供一个验证该输入的验证器有什么问题?
  • 程序永远不会到达验证文本框的代码。代码已更新。

标签: asp.net validation


【解决方案1】:

您的ServerValidate 签名错误。

void ServerValidation(object source, ServerValidateEventArgs args)
{
    args.IsValid = Regex.Match(TextUserName.Text, @"^[a-zA-Z0-9]{6,}$", RegexOptions.IgnoreCase);
}

【讨论】:

  • 不,我只是为了演示目的而更改了它。最初它与您的代码相同。但它从未达到它。也许这不是用户的输入?
  • 让我澄清一下。我的意思是代码确实进入了验证器部分,但我发现 args.IsValid = false;然后看起来验证器不起作用。它应该显示错误消息并卡在文本框上。但事实并非如此。
  • @Love:看看最近对类似问题的回答。可能会有所帮助:stackoverflow.com/a/10172624/284240 上面的代码是完整的还是只是一个 sn-p?也许您有其他验证器阻止 ServerValidate 执行。
  • 我有一个提交新更改的按钮。我必须添加验证组吗?
  • 不一定,如果你不指定一个组,整个页面都会被验证。单击按钮时页面是否会返回?您可以通过Page.Validate()(如上面的链接所示)在按钮的点击处理程序中强制验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多