我有以下带有RequiredFieldValidator
. 该EnableClientScript
属性在验证控件中设置为“false”。我也在浏览器中禁用了脚本。
我没有Page.IsValid
在后面的代码中使用。不过,当我在文本框中提交没有任何值时,我会得到error message
.
从@Dai 的评论中,我知道这可能是一个问题,如果其中有任何代码Page_Load
在postback
. 不会引发验证错误。
(但是,对于按钮单击处理程序,无需检查Page.IsValid
)
if (Page.IsPostBack)
{
string value = txtEmpName.Text;
txtEmpName.Text = value + "Appended";
}
问题
- 为什么服务器端验证之前没有发生
Page_Load
? - 为什么我使用时它工作正常
Page.IsValid
? - 您能否提供对解释这一点的文章的任何参考?(不是说 - 总是使用
Page.IsValid
;而是说什么是强制使用的场景Page.IsValid
更新 1
Page.IsValid
只有在运行Page.Validate()
方法之后才能访问,该方法在Page_Load
. 如果您将所有逻辑保存在 Page_Load 事件处理程序中(强烈建议不要这样做!),请Page.Validate()
在检查Page.IsValid
.
注意:建议不要将所有逻辑都保留在Page_Load
. 如果按钮单击事件发生某些事情,请将其移至按钮单击事件处理程序。如果下拉事件发生某些事情,请将其移动到下拉选定项更改事件处理程序。
更新 2
看起来,如果我们使用服务器端验证,我们也需要添加If(Page.IsValid)
。请参阅CustomValidator 无法正常工作。button click
Custom Validator
注意:此处存在客户端验证问题:是否使用 Page_IsValid 或 Page_ClientValidate()(用于客户端事件)
标记
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
alert('haiii');
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ValidationSummary runat="server" ID="vsumAll" DisplayMode="BulletList" CssClass="validationsummary" ValidationGroup="ButtonClick" />
<asp:TextBox ID="txtEmpName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="valEmpName" runat="server" ControlToValidate="txtEmpName"
EnableClientScript="false" ErrorMessage="RequiredFieldValidator" Text="*" Display="Dynamic"
ValidationGroup="ButtonClick"></asp:RequiredFieldValidator>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" ValidationGroup="ButtonClick" />
</div>
</form>
</body>
</html>
代码背后
protected void Button1_Click(object sender, EventArgs e)
{
string value = txtEmpName.Text;
SubmitEmployee(value);
}
参考资料: