成功回发和表单重置后显示RequiredFieldValidator错误消息

时间:2016-01-29 15:23:58

标签: c# asp.net forms

(使用ASP.NET Web窗体.Microsoft .NET Framework版本:4.0.30319,ASP.NET版本:4.0.30319.34274)

我有一个asp:TextBox字段,其中包含该文本字段的RequiredFieldValidator:

webpack.config.js

var path = require('path');
var webpack = require('webpack');

module.exports = {
    entry: './app/main.js',
    output: {
        path: __dirname + '/dist',
        filename: 'bundle.js'
    },
    module: {
        loaders: [
            {
                loader: 'babel-loader',
                test: path.join(__dirname, 'es6'),
                query: {
                  presets: 'es2015',
                },
            },


        ]
    },
    plugins: [
        // Avoid publishing files when compilation fails
        new webpack.NoErrorsPlugin()
    ],
    stats: {
        // Nice colored output
        colors: true
    },
    // Create Sourcemaps for the bundle
    devtool: 'source-map',
};

当用户在页面上提交表单时,我会对其进行验证,然后清除表单,以便用户可以再次使用该表单。 <asp:TextBox runat="server" ID="MyTextBox" /> <asp:RequiredFieldValidator runat="server" ID="RequiredUserName" ControlToValidate="MyTextBox" ErrorMessage="MyTextBox is required" Display="None" /> 中的代码如下所示:

Page_Load

所以,我验证了所有内容,它是Page.IsValid是真的,我保存用户表单数据,然后尝试清除表单以便用户再次填写。但是,由于表单已清除,RequiredFieldValid显示其错误消息,即使我已经运行if (Page.IsPostBack) { Page.Validate(); if (Page.IsValid) { SaveFormSubmissionToDatabase(); MyTextBox.Text = ""; } } 并且尚未再次运行它。

为什么这样做以及如何避免在清除表单后显示此错误消息?更一般地说,为什么要再次运行此RequiredFieldValidator?

我应该注意,错误消息实际上显示在Page.Validate()控件中。

(我认为可能是客户端验证触发了显示的错误消息,因此我在RequiredFieldValidator中设置asp:ValidationSummary,但这并没有改变任何内容)

我已经对此问题进行了一些研究,并发现其他人有同样的问题,但没有解决方案。例如This question。建议的解决方案是重定向到同一个页面,这个页面不能用于我的用例,因为我需要显示有关刚刚提交的表单的一些信息,包括成功消息,并且如果信息将丢失,我重定向到同一页面。

1 个答案:

答案 0 :(得分:1)

您收到消息的原因是由于对Page.Validate()的调用,这正是名称所指示的内容。并且因为每次回发都会调用验证。

通常,您不会将该代码放在Page_Load中,而是放在提交按钮的onClick上。

即:

    protected void SubmitButton_OnClick(object sender, EventArgs e)
    {
        Page.Validate();
        if (Page.IsValid)
        {
            SaveFormSubmissionToDatabase();
            MyTextBox.Text = "";
        }
    }

更新:让我改进原因。在原始帖子中,MyTextBox.Text = ""不是最后发生的事情。页面上的控件也将触发其事件和验证,这发生在Page_Load事件之后。

对于完整的生命周期参考:https://msdn.microsoft.com/en-us/library/ms178472.aspx#general_page_lifecycle_stages