ASP.NET验证发生在回发上

时间:2012-07-24 06:30:56

标签: asp.net validation postback

我在标准ASP.NET页面上有一个带有一些输入控件的表单。我使用验证控件来验证服务器上的输入。

我注意到有一些文章描述了在验证失败时阻止回发的问题。我的问题恰恰相反,即从不阻止回发,但每次发生回发时都会发生验证,这意味着每次用户更改输入字段中的值时,表单都会用红色文本绘制(即使他很清楚他没有完成表格!)。

此论坛的其他文章认为此行为是有意的。显然,用户不希望在他按下“提交”之前告诉他他做错了什么的信息。播种如何配置控件只在按下提交按钮时显示验证摘要而不是在任何回发上?

注意:我只在按下提交按钮时调用Page.IsValid - 没有其他地方。感谢。

3 个答案:

答案 0 :(得分:3)

尝试将validationgroup属性添加到所有验证程序和要导致验证的按钮。看到更多:http://msdn.microsoft.com/en-us/library/ms227424.aspx 示例:

    <asp:TextBox ID="TextBox1" Runat="server" ValidationGroup="First"></asp:TextBox>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" Runat="server" ValidationGroup="First"
    ErrorMessage="TextBox1 should not be blank" ControlToValidate="TextBox1">

    </asp:RequiredFieldValidator>
    <asp:Button ID="Submit1" Runat="server" ValidationGroup="First" Text="Submit 1" />

答案 1 :(得分:0)

您需要为按钮点击时验证所需的所有控件提供相同验证组属性。此外,您的按钮必须具有相同的验证组,并将按钮的 causevalidation 属性设置为true。 这应该避免你回发。 感谢。

答案 2 :(得分:0)

验证组将本地化ValidationSummary显示区域,通常在物理上靠近其关联的数据字段。 与价值变化的自动回发无关。

我要检查验证程序是否启用了客户端脚本。 如果没有,只有服务器可以验证数据 - 需要对任何值更改进行回发。

PS:在简单表单上,我从不使用验证组,因为所有报告的错误都可以在默认组和相关消息一起显示下累积。 在复杂的表单上,我可以创建几个组,使错误在物理上接近违规数据。无论您的分组如何,所有验证方法都将运行 - 并在指定的组内报告相关的validationSummary(如果提供)。 的修改 这来自微软:

  

要以编程方式验证,可以调用Validate方法   使用validationGroup参数强制验证的重载   仅适用于该验证组。请注意,当您调用Validate时   方法,IsValid属性反映所有组的有效性   到目前为止验证。这可能包括经过验证的组   作为回发的结果,以及以编程方式验证的组。   如果任一组中的任何控件无效,则为IsValid属性   返回false。

http://msdn.microsoft.com/en-us/library/vstudio/ms227424(v=vs.100).aspx

组合与回发无关。他可能有一个带有自动回发设置或脚本关闭的控件。