ASP.net验证技术
我在ASP.NETMVC工作了1.5年。在这里,我使用企业应用程序块进行服务器端验证。我喜欢viewmodels绑定到视图控件的方式,并喜欢以这种方式进行验证。但是现在我在一个项目中工作,这个项目纯粹是没有MVC的webforms 这里jQuery用于客户端验证,而根本没有服务器端验证。我强调了服务器端验证的重要性,并计划使用企业库进行验证 由于某些原因(可能是因为我最近在ASP.NETMVC中工作),我在某一点上感到自大 在我的webforms应用程序中,我的验证必须包含客户端和服务器端的相同逻辑。或者一般来说,在ASP.NETWeb表单中编码验证的最佳实践是什么ASP.net验证技术,asp.net,.net,validation,webforms,Asp.net,.net,Validation,Webforms,我在ASP.NETMVC工作了1.5年。在这里,我使用企业应用程序块进行服务器端验证。我喜欢viewmodels绑定到视图控件的方式,并喜欢以这种方式进行验证。但是现在我在一个项目中工作,这个项目纯粹是没有MVC的webforms 这里jQuery用于客户端验证,而根本没有服务器端验证。我强调了服务器端验证的重要性,并计划使用企业库进行验证 由于某些原因(可能是因为我最近在ASP.NETMVC中工作),我在某一点上感到自大 在我的webforms应用程序中,我的验证必须包含客户端和服务器端的相同
我想遵循普遍接受的做法。此外,webforms验证中还有比企业库更好的新概念。示例应该有助于我理解。我认为您应该多验证而不是少验证……除了客户端检查之外,服务器端检查也是一个好主意(特别是对于面向外部的应用程序)。你要特别小心文本框。请记住,用户可以关闭脚本(并完全绕过客户端脚本) 使用触发ServerValidate事件的自定义验证器控件实现服务器端验证非常简单
我没有使用过企业库,因此我无法回答有关它提供的验证例程的任何问题。您可以使用CustomValidator进行任何操作,它们是我的最爱 如果您使用HTML5属性,如
required=“required”
,您可以免费获得客户端反馈
您还可以利用它们执行服务器端验证,如下所示:
代码隐藏功能:
私有void buildRequiredWebControl(列表lst,控件c)
{
如果(c是网络控制)
if(String.Compare((c作为网络控制).Attributes[“required”]?String.Empty,“required”,true)=0)
添加((c作为网络控制));
foreach(c.Controls中的控制ch)
构建所需网络控制(lst、ch);
}
/* --------------------------------------------- */
需要专用布尔addAllFields(列表控件)
{
foreach(网络控制,带控制)
{
如果(w作为文本框!=null)
if(String.IsNullOrWhiteSpace((w as TextBox.Text))返回false;
if(w作为DropDownList!=null)
if(String.IsNullOrWhiteSpace((w作为DropDownList.SelectedValue))返回false;
}
返回true;
}
/* --------------------------------------------- */
私有void cmdSubmit\u单击(对象发送方,事件参数e)
{
vSummary.ValidationGroup=“StackOverflow”;
第页:验证(“StackOverflow”);
List requiredFields=新列表();
this.buildRequiredWebControl(requiredFields,this);
Page.Validators.Add(新的CustomValidator()
{
IsValid=此.addAllFieldsRequired(requiredFields),
ErrorMessage=“请填写所有必填字段。”,
ValidationGroup=“StackOverflow”
});
如果(第页有效)
{
//在必填字段上继续很好
}
}
击败了非常单调的替代方法,即在每个控件之后手动将它们插入html:
private void buildRequiredWebControls(List<WebControl> lst, Control c)
{
if (c is WebControl)
if (String.Compare((c as WebControl).Attributes["required"] ?? String.Empty, "required", true) == 0)
lst.Add((c as WebControl));
foreach (Control ch in c.Controls)
buildRequiredWebControls(lst, ch);
}
/* --------------------------------------------- */
private Boolean addAllFieldsRequired(List<WebControl> controls)
{
foreach (WebControl w in controls)
{
if (w as TextBox != null)
if (String.IsNullOrWhiteSpace((w as TextBox).Text)) return false;
if (w as DropDownList != null)
if (String.IsNullOrWhiteSpace((w as DropDownList).SelectedValue)) return false;
}
return true;
}
/* --------------------------------------------- */
private void cmdSubmit_Click(object sender, EventArgs e)
{
vSummary.ValidationGroup = "StackOverflow";
Page.Validate("StackOverflow");
List<WebControl> requiredFields = new List<WebControl>();
this.buildRequiredWebControls(requiredFields, this);
Page.Validators.Add(new CustomValidator()
{
IsValid = this.addAllFieldsRequired(requiredFields),
ErrorMessage = "Please complete all required fields.",
ValidationGroup = "StackOverflow"
});
if (Page.IsValid)
{
//Good to Go on Required Fields
}
}
<asp:ValidationSummary runat="server" id="vSummary" ValidationGroup="StackOverflow" />
<asp:TextBox runat="server" id="txtReq" required="required" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtReq" ErrorMessage="Please Fill Out Required Field" Text="*" ValidationGroup="StackOverflow" />
<asp:DropDownList runat="server" id="ddlReq" required="required">
<asp:ListItem text="..." value="" />
<asp:ListItem text="Yes" value="1" />
<asp:ListItem text="No" value="0" />
</asp:DropDownList>
<asp:RequiredFieldValidator runat="server" ControlToValidate="ddlReq" ErrorMessage="Please Fill Out Required Field" Text="*" ValidationGroup="StackOverflow" />
<asp:Button runat="server" id="cmdSubmit" text="Submit" />