![](/img/trans.png)
[英]How to make RequiredIf Client-side and server-side validation in ASP.NET Core 3.1 MVC?
[英]ASP.NET Client-side vs Server-side Validation
我經常從學校的“講師”那里得到不正確的信息。
對於ASP.NET Web應用程序,來自工具箱的驗證器(如CompareValidator,RangeValidator,RequiredFieldValidator等)是否被視為服務器端驗證?
因為我們還添加了一個jQuery NuGet包,當用戶使用Tab鍵時,它會提供實時驗證,就像用戶在需要數字時鍵入字母一樣。
對於C#中的WPF,我創建一個Validator類或使用一個Library並通過靜態方法檢查驗證。 我是否也應該在ASP.NET中這樣做? 還是RequiredFieldValidator等足以用於服務器端驗證?
這是一個例子:
<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>
謝謝
******編輯*****
像我的“講師”一樣,您給出的答案不清楚或不完整。
是或否,這是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)部分?
您將混合使用ASP.NET驗證控件和客戶端驗證與服務器端驗證之間的差異。
當ASP.NET頁面呈現Validation Controls RequiredFieldValidator和RangeValidator等時,它將自動創建客戶端JavaScript函數以在瀏覽器內執行驗證,即客戶端驗證。
IsValid
是ASP.Net Pages的服務器端驗證功能,通過它可以驗證WebForm / WebPage中使用的Asp.Net驗證控件是否已執行驗證,並且在服務器端代碼中驗證是否應用了所有驗證(即,如果所有輸入必填字段等),然后IsValid
變為true。
請注意,將IsValid
放入服務器端代碼不是強制性的 ,因為創建的JavaScript函數將在客戶端進行所需的驗證。
因此,基本上,ASP.NET驗證控件有助於從客戶端和服務器端驗證ASP.NET頁,並且與純JavaScript驗證相比具有優勢。
另一個示例是JQuery代碼(JavaScript庫),該代碼可用於執行客戶端驗證,例如驗證文本框的值是否為空。 同時,通過對服務器端Web服務方法的AJAX調用,可以使用JQuery進行服務器端驗證。
使用ASP.Net驗證服務器控件時,您仍然想在嘗試將數據保存到服務器端之前仔細檢查該Page.IsValid
。
根據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
ASP.NET驗證控件可用於客戶端和服務器端驗證。 驗證控件始終在服務器上執行驗證。 他們還具有完整的客戶端實現。 使用EnableClientScript屬性可以指定是否啟用客戶端驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.