(使用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。建议的解决方案是重定向到同一个页面,这个页面不能用于我的用例,因为我需要显示有关刚刚提交的表单的一些信息,包括成功消息,并且如果信息将丢失,我重定向到同一页面。
答案 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