【问题标题】:regular+required validation常规+必需的验证
【发布时间】:2009-11-24 11:06:47
【问题描述】:
<asp:TextBox ID="Textboxtotalamount" OnTextChanged="AmountChanged"
         Width="90px" AutoPostBack="true" runat="server">
</asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator" runat="server" 
         ControlToValidate="Textboxtotalamount"
         SetFocusOnError="True" ValidationGroup="val">*</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
         ControlToValidate="Textboxtotalamount"
         ValidationExpression="^[-+]?[1-9]\d{0,13}(\.\d{1,3})?%?$"
         SetFocusOnError="True">F</asp:RegularExpressionValidator>

在上面的代码中可以正确验证.......但在文本框中我调用“OnTextChanged” 事件 ....假设如果我在文本框中键入(字符)错误消息同时显示 ontextchanged 事件也称为发生错误 ....当正则表达式引发时,我必须停止 OnTextChanged 事件...... 请帮忙

【问题讨论】:

  • Domnic,一旦你有了正则表达式验证器和必填字段验证器,它们只会在客户端通过 JavaScript 验证用户输入,现在如果它们被传递,那么只有 AmountChanged 事件将在服务器端触发(如果您想在客户端更改金额,则需要在 Javascript 中添加 page_ClientValidate())。
  • @Beginner:我不敢苟同:RegularExpressionValidator 执行客户端服务器端验证。 msdn.microsoft.com/en-us/library/…
  • @Beginner - RequiredFieldValidator 和 RegularExpressionValidator 都执行客户端和服务器端验证。
  • 顺便说一句,这个问题与stackoverflow.com/questions/1789355完全相同

标签: asp.net


【解决方案1】:

我更新了你的代码。看看这对你有没有帮助。

<asp:TextBox ID="Textboxtotalamount" OnTextChanged="AmountChanged" ValidationGroup="val"
         Width="90px" AutoPostBack="true" runat="server" CausesValidation="true">
</asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator" runat="server" ValidationGroup="val"
         ControlToValidate="Textboxtotalamount"
         SetFocusOnError="True" >*</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
         ControlToValidate="Textboxtotalamount" ValidationGroup="val"
         ValidationExpression="^[-+]?[1-9]\d{0,13}(\.\d{1,3})?%?$"
         SetFocusOnError="True">F</asp:RegularExpressionValidator>

【讨论】:

  • @Heinzi:是的。但它在客户端。仍然应该在服务器端验证“this.Validate”。好的做法;)
  • 如果我写了一个问题,当我按下更新按钮时显示的字符消息然后调用了 amountchanged() 事件并发生错误我如何在 amountchangedevent() 中处理
  • @Saar:那么 CausesValidation 不会启动服务器端验证?
  • @Heinzi:好问题。 msdn.microsoft.com/en-us/library/…我不是asp.net专家,但正如msdn所解释的,它应该在客户端。需要进一步调查/研究。
【解决方案2】:

我不确定我是否正确理解了您的问题:您只想在验证器未报告任何错误的情况下执行“AmountChanged”代码,对吗?在这种情况下,您应该调用

if (!this.IsValid)
    return;

AmountChanged 的开头。 (您可能需要先调用this.Validate();,如果 OnTextChanged 不自行启动验证。)

详情请见:http://msdn.microsoft.com/en-us/library/dh9ad08f(VS.100).aspx


澄清:目前,您的代码如下所示:

void AmountChanged(...) {
    ...
}

你需要把它改成这样:

void AmountChanged(...) {
    if (!this.IsValid)
        return;

     ...
}

这样当某些验证器检测到错误时,代码不会被执行。此外,您必须将CausesValidation="true" 添加到您的文本框,如Saar 的示例所示。

【讨论】:

  • AmountChanged 方法的开头。
  • 请提供完整的家具细节......在页面加载事件中我应该使用什么和数量更改事件我应该使用什么
  • void Page_Load(object sender, EventArgs e) { ... }
猜你喜欢
  • 1970-01-01
  • 2019-11-11
  • 2021-05-22
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 2011-02-23
  • 2019-06-01
相关资源
最近更新 更多