我经常从学校的“讲师”那里得到不正确的信息。
对于ASP.NET Web应用程序,工具箱中的Validator,如CompareValidator,RangeValidator,RequiredFieldValidator等,是否被认为是服务器端验证?
因为我们还添加了一个jQuery NuGet包,它在用户选项卡时提供实时验证,就像用户在需要数字时键入一个字母一样。
对于C#中的WPF,我创建一个Validator类或使用一个库,并通过静态方法检查验证。我也应该在ASP.NET中这样做吗?或者,RequiredFieldValidators等是否足以进行服务器端验证?
以下是一个例子:
<div class="form-group">
<label class="control-label col-sm-4">Length:</label>
<div class="col-sm-4">
<asp:TextBox ID="txtLength" runat="server" CssClass="form-control" MaxLength="15"></asp:TextBox>
</div>
<div class="col-sm-4">
<asp:RequiredFieldValidator ID="rfvLength" runat="server" ErrorMessage="Length is required"
ControlToValidate="txtLength" CssClass="error" Display="Dynamic" SetFocusOnError="True"></asp:RequiredFieldValidator>
<asp:RangeValidator ID="rngLength" runat="server" ErrorMessage="Must be between .01 and 10,000"
MaximumValue="10000" MinimumValue=".01" ControlToValidate="txtLength" CssClass="error" Display="Dynamic"
SetFocusOnError="True" Type="Double"></asp:RangeValidator>
</div>
</div>
感谢
****** ***** EDIT
你的答案不清楚或不完整,就像我的“讲师”一样。
是或否请,这是ASP.NET中的服务器端验证吗?
<div class="form-group">
<label class="control-label col-sm-4">Length:</label>
<div class="col-sm-4">
<asp:TextBox ID="txtLength" runat="server" CssClass="form-control" MaxLength="15"></asp:TextBox>
</div>
<div class="col-sm-4">
<asp:RequiredFieldValidator ID="rfvLength" runat="server" ErrorMessage="Length is required"
ControlToValidate="txtLength" CssClass="error" Display="Dynamic" SetFocusOnError="True"></asp:RequiredFieldValidator>
<asp:RangeValidator ID="rngLength" runat="server" ErrorMessage="Must be between .01 and 10,000"
MaximumValue="10000" MinimumValue=".01" ControlToValidate="txtLength" CssClass="error" Display="Dynamic"
SetFocusOnError="True" Type="Double"></asp:RangeValidator>
</div>
</div>
然后我还补充说:
protected void btnCalculate_Click(object sender, EventArgs e)
{
if (IsValid)
{
double length = Convert.ToDouble(txtLength.Text);
double width = Convert.ToDouble(txtWidth.Text);
Rectangle r = new Rectangle(length, width);
txtArea.Text = r.Area().ToString("f");
txtPerimeter.Text = r.Perimeter().ToString("f");
txtDiagonal.Text = r.Diagonal().ToString("f");
}
}
这是否正确,因为ASP.NET中的服务器端验证是否正确使用if(IsValid)部分?
答案 0 :(得分:3)
您正在混合 ASP.NET验证控件以及客户端和服务器端验证之间的差异。
当ASP.NET页面呈现验证控件 RequiredFieldValidator 和 RangeValidator 等时,它会自动创建客户端JavaScript函数以在浏览器中执行验证,即客户端验证。
IsValid
是ASP.Net Pages的服务器端验证功能,用于验证WebForm / WebPage中使用的Asp.Net验证控件是否已执行验证,以及服务器端代码(如果所有)应用验证(即,如果输入了所有必填字段等),则IsValid
变为真。
请注意非强制将IsValid
放入服务器端代码中,因为创建的JavaScript函数将在客户端执行必要的验证。
因此,基本上ASP.NET验证控件有助于从客户端和服务器端验证ASP.NET页面,并且与纯JavaScript验证相比具有优势。
另一个例子是 JQuery 代码(JavaScript库),可以用来进行客户端验证,例如验证文本框的值是否为空。同时,JQuery可用于通过对服务器端的Web服务方法的AJAX调用来进行服务器端验证。
答案 1 :(得分:0)
使用ASP.Net验证服务器控件时,您仍然需要在尝试在服务器端保存数据之前仔细检查Page.IsValid
。
答案 2 :(得分:0)
根据MSDN,这些控件在客户端注入了某种javascript验证;
默认情况下,验证器控件将客户端ECMAScript(JavaScript)注入页面以在浏览器中执行验证检查。这为用户提供了验证错误的即时反馈;如果没有客户端脚本,检查验证错误将需要往返服务器,有时可能会很慢。实际上,在客户端验证成功之前,您无法提交页面
https://msdn.microsoft.com/en-us/library/a0z2h4sw.aspx
某些控件还具有服务器验证选项,如果需要,可以使用该选项:
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args){
try
{
DateTime.ParseExact(args.Value, "m/d/yyyy",
System.Globalization.DateTimeFormatInfo.InvariantInfo);
args.IsValid = true;
}
catch
{
args.IsValid = false;
}}
您还可以查看Page.IsValid
答案 3 :(得分:0)
ASP.NET验证控件可用于客户端和服务器端验证。验证控件始终在服务器上执行验证。他们还有完整的客户端实现。 使用EnableClientScript属性指定是否启用客户端验证。