我有以下代码RequiredFieldValidator
. The EnableClientScript
属性在验证控件中设置为“false”。我还在浏览器中禁用了脚本。
我没有使用Page.IsValid
在后面的代码中。不过,当我在文本框中没有任何值的情况下提交时,我会得到error message
.
从@Dai的评论中,我知道这可能是一个问题,如果有任何代码Page_Load
这是在一个执行postback
。不会抛出验证错误。
(但是,对于按钮单击处理程序,无需检查Page.IsValid
)
if (Page.IsPostBack)
{
string value = txtEmpName.Text;
txtEmpName.Text = value + "Appended";
}
QUESTION
- 为什么之前没有进行服务器端验证
Page_Load
?
- 为什么我使用的时候效果很好
Page.IsValid
?
- 您能提供解释这一点的文章参考吗? (不是说 - 总是使用
Page.IsValid
;但有些东西说明了必须使用的场景是什么Page.IsValid
UPDATE 1
Refer ASP.NET 验证器的常见误解 http://blogs.microsoft.co.il/blogs/linqed/archive/2009/09/01/asp-net-validators-common-misconception.aspx
Page.IsValid
仅在运行后才能访问Page.Validate()
之后隐式调用的方法Page_Load
。如果您将所有逻辑保留在 Page_Load 事件处理程序中(强烈建议不要这样做!),请调用Page.Validate()
在检查之前Page.IsValid
.
Note: 建议不保留所有逻辑都在Page_Load
。如果按钮单击事件发生某些情况,请将其移至按钮单击事件处理程序。如果下拉事件发生某些情况,请将其移至下拉所选项目更改事件处理程序。
UPDATE 2
看来我们需要添加If(Page.IsValid)
in button click
另外,如果我们使用的是Custom Validator
与服务器端验证。参考CustomValidator 无法正常工作 https://stackoverflow.com/questions/11064613/customvalidator-not-working-well.
Note:此处存在客户端验证问题:是否使用 Page_IsValid 或 Page_ClientValidate()(对于客户端事件) https://stackoverflow.com/questions/13832818/whether-to-use-page-isvalid-or-page-clientvalidate-for-client-side-events
MARKUP
<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);
}
参考:
- 我应该始终调用 Page.IsValid 吗? https://stackoverflow.com/questions/1039465/should-i-always-call-page-isvalid
- ASP.NET 验证控件 – 要点、提示和技巧 http://www.dotnetcurry.com/ShowArticle.aspx?ID=121
- CustomValidator 无法正常工作 https://stackoverflow.com/questions/11064613/customvalidator-not-working-well