我在我的网站上使用了一些典型的ASP.NET验证控件。现在我正在尝试禁用浏览器中的JavaScript
来测试我的应用程序,当然Validation Controls
不再有效。我认为最好尝试使用其中一个建议的解决方案使其工作,而不是重新投资轮子并为页面或我的对象构建验证层 - 我认为对吗? -
您如何看待这些选项以及原因:
在单击按钮的事件中包含一个代码,用于检查页面是否有效以及是否显式调用Page.Validate();
方法
检查JavaScript是否已启用,如果未启用,我应致电Page.Validate();
如果您有更好的方法,请告诉我。
答案 0 :(得分:3)
Javascript表单验证纯粹是为了方便用户。这会阻止他们提交包含无效电话号码的表单。
当收到任何请求时,实际上应在服务器上验证所有输入。这是理想的流程,您将看到没有启用javascript的浏览器没什么大不了的:
browser -> javascript validation (optional) -> server validation (if this fails, go back to initial page with errors)
因此,即使他们没有JS,页面仍然提交数据,然后您可以从服务器返回错误。这通常是较差的用户体验(整页重新加载,可能重新输入输入,除非您重新填充表单)这就是为什么JS通常包含在验证方案中。
答案 1 :(得分:1)
验证控件旨在验证服务器端的 。客户端验证是可选的(请参阅EnableClientScript
属性)。因此,如果他们不使用Javascript,那么您可能在页面中遗漏了一些样板代码,例如来自the MSDN documentation on Page.IsValid的此代码段:
private void ValidateBtn_Click(Object Sender, EventArgs E)
{
Page.Validate();
if (Page.IsValid == true) // yes, it is written this way in the MSDN documentation
lblOutput.Text = "Page is Valid!";
else
lblOutput.Text = "Some required fields are empty.";
}
您还可以致电Page.Validate
并查看您网页Page.IsValid
事件中的OnLoad
,以便在表单需要重新启动时阻止回发进入下一步提交。您甚至可能不需要明确调用Validate()
- 默认情况下Button.CausesValidation
为真。
答案 2 :(得分:0)
您需要进行自定义服务器端验证... http://msdn.microsoft.com/en-us/library/aa479013.aspx(底部信息)
这样的事情:
<%@ Page Language="C#" %>
<script runat="server">
void Button1_Click(Object sender, EventArgs e) {
if (Page.IsValid) {
Label1.Text = "VALID ENTRY!";
}
}
void ValidateNumber(object source, ServerValidateEventArgs args)
{
try
{
int num = int.Parse(args.Value);
args.IsValid = ((num%5) == 0);
}
catch(Exception ex)
{
args.IsValid = false;
}
}
</script>
<html>
<head>
</head>
<body>
<form runat="server">
<p>
Number:
<asp:TextBox id="TextBox1"
runat="server"></asp:TextBox>
<asp:CustomValidator id="CustomValidator1"
runat="server" ControlToValidate="TextBox1"
ErrorMessage="Number must be even"
OnServerValidate="ValidateNumber"></asp:CustomValidator>
</p>
<p>
<asp:Button id="Button1" onclick="Button1_Click"
runat="server" Text="Button"></asp:Button>
</p>
<p>
<asp:Label id="Label1" runat="server"></asp:Label>
</p>
</form>
</body>
</html>