Laj*_*pad 9 asp.net validation
我有3种类型的验证器:
它是"VG1"验证组的一部分
它是"VG2"验证组的一部分
它不是任何验证组的一部分
我有两个按钮,B1和B2.
我想验证B1.Click当且仅当第一和第三类型的所有验证器成功验证了与它们相关的控件时.
我想验证B2.Click当且仅当第二和第三类的所有验证器成功验证了与它们相关的控件时.
这在ASP.NET中可行吗?如果是这样,你能告诉我我该怎么做?或者在哪里可以阅读一些可以在这个问题上启发我的东西?
编辑:
function isValidButton1()
{
var VG1 = Page_ClientValidate("VG1");
var empty = Page_ClientValidate("");
return VG1 && empty;
}
Run Code Online (Sandbox Code Playgroud)
这很有效,但是,如果VG1无效,则由于空组的验证,消息将消失.是否有解决方案显示所有验证错误消息?谢谢.
EDIT2:
function isValidSaveAsClosed()
{
Page_ClientValidate("");
Page_ClientValidate("VG1");
var groups = [];
groups[0] = undefined;
groups[1] = "VG1";
var valid = true;
for (var f in Page_Validators)
{
if (jQuery.inArray(Page_Validators[f].validationGroup, groups) >= 0)
{
ValidatorValidate(Page_Validators[f]);
valid = valid && Page_Validators[f].isvalid;
}
}
return valid;
}
Run Code Online (Sandbox Code Playgroud)
上面的功能解决了我的问题.
Lea*_*Asp 12
<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="return Validate()" />
<script type="text/javascript">
function Validate()
{
var isValid = false;
isValid = Page_ClientValidate('VG1');
if (isValid)
{
isValid = Page_ClientValidate('VG2');
}
return isValid;
}
</script>
Run Code Online (Sandbox Code Playgroud)
试试这个....希望它会有所帮助
小智 5
是的,一个按钮可以验证多个验证组。
在 button_click 内,您可以将组验证为
Page.Validate("VG1");
Page.Validate("VG2");
if (Page.IsValid)
{
// Page is valid so proceed..!!
}
Run Code Online (Sandbox Code Playgroud)
我正在添加另一个答案,因为添加到我的上一个现有答案会使答案太大而任何人都无法阅读。
在这个答案中,我扩展了我的最后一个答案,因此automatically在客户端和服务器端都连接了多个验证组。这意味着您不需要Page_ClientValidate("group1,group2")在 JavaScript 中调用按钮的 onclick 事件,因为它会自动发生。此外,多个组的服务器端验证将自动发生。
下面给出了为此的标记和代码隐藏。您可以尝试我提供的 aspx 代码并在网站项目中对其进行测试。要测试是否发生自动服务器端验证,您必须EnableClientScript="false"为三个验证器中的每一个进行设置。
多组自动验证方法说明
如果要实现多个验证组,则需要在您的 aspx 页面中完成以下步骤。ValidationGroup如果您需要一次验证多个组,请确保在您的标记中提到了一个逗号分隔的按钮控件属性验证组列表。
IsValidationGroupMatch通过将 JavaScript 添加到 aspx 页面的末尾来覆盖 JavaScript 方法(此覆盖的代码在下面的标记代码末尾给出,您可以将其复制/粘贴到您的 aspx 页面中);这是 ASP.Net 验证框架提供的标准方法。HookupValidationForMultipleValidationGroups在 Page_Load 事件中为每个具有多个验证组的按钮调用代码隐藏中的方法。(您可以将第二个代码片段中给出的此方法复制/粘贴到 aspx 页面的代码隐藏中)Validate来为多个验证组添加功能,因为 ASP.Net 中缺少此功能。(您可以将第二个代码片段中给出的此方法复制/粘贴到 aspx 页面的代码隐藏中)带有多个验证组的 aspx 标记按钮
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MultipleValidationGroupsByOneButton.aspx.cs" Inherits="MultipleValidationGroupsByOneButton" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
TextBox1 :
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="TextBox1 needs input" ControlToValidate="TextBox1" ForeColor="Red" ValidationGroup="group1"></asp:RequiredFieldValidator>
<br />
<br />
TextBox2 :
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="TextBox2 needs input" ControlToValidate="TextBox2" ForeColor="Red" ValidationGroup="group2"></asp:RequiredFieldValidator>
<br />
<br />
TextBox3 :
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="TextBox3 needs input" ControlToValidate="TextBox3" ForeColor="Red" ValidationGroup="group3"></asp:RequiredFieldValidator>
<br />
<br />
</div>
<asp:Button ID="btnMultipleValidationGroups" runat="server" Text="Validate group1 and group2" ValidationGroup="group1,group2" OnClick="btnMultipleValidationGroups_Click" />
<asp:Button ID="btnGroup1" runat="server" Text="Validate only group1" ValidationGroup="group1" OnClick="btnGroup1_Click" />
<asp:Button ID="btnGroup2" runat="server" Text="Validate only group2" ValidationGroup="group2" OnClick="btnGroup2_Click" />
<asp:Label ID="lblMessage" runat="server" ForeColor="Red" Font-Bold="true"></asp:Label>
<script type="text/javascript">
window["IsValidationGroupMatch"] = function (control, validationGroup) {
if ((typeof (validationGroup) == "undefined") || (validationGroup == null)) {
return true;
}
var controlGroup = "";
var isGroupContained = false;
if (typeof (control.validationGroup) == "string") {
controlGroup = control.validationGroup;
var controlGroupArray = [];
if (validationGroup.indexOf(",") > -1) {
controlGroupArray = validationGroup.split(",");// validationGroup.split(",");
}
for (var i = 0; i < controlGroupArray.length; i++) {
if (controlGroupArray[i].trim() == controlGroup.trim()) {
isGroupContained = true;
}
}
}
return (controlGroup == validationGroup || isGroupContained);
}
</script>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
上面的aspx页面的代码隐藏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class MultipleValidationGroupsByOneButton : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//always call this method in Page Load event for each button with multiple validation groups
HookupValidationForMultipleValidationGroups(btnMultipleValidationGroups);
}
//the method below will automatically hook up a button with multiple validation groups for client-side validation
private void HookupValidationForMultipleValidationGroups(IButtonControl button)
{
if (!Page.IsPostBack && button.ValidationGroup.Contains(","))
{
//hook up validation on client-side by emitting the appropriate javascript for onclick event of the button with multiple validation groups
PostBackOptions myPostBackOptions = new PostBackOptions((WebControl)button);
myPostBackOptions.ActionUrl = string.Empty;
myPostBackOptions.AutoPostBack = false;
myPostBackOptions.RequiresJavaScriptProtocol = true;
myPostBackOptions.PerformValidation = true;//THIS true value hooks up the client-side validation
myPostBackOptions.ClientSubmit = true;
myPostBackOptions.ValidationGroup = button.ValidationGroup;
// Add postback script so cleint-side validation is automatically hooked up for control with multiple validation groups
((WebControl)button).Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(myPostBackOptions));
}
}
//Override default Validate method so server-side validation of buttons with multiple validation groups occurs automatically
public override void Validate(string validationGroup)
{
if (validationGroup.Contains(","))
{
string[] validationGroups = validationGroup.Split(",".ToCharArray());
foreach (string group in validationGroups)
{
Page.Validate(group);
}
}
base.Validate(validationGroup);
}
protected void btnMultipleValidationGroups_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
lblMessage.Text = "Button with multiple validation groups was clicked";
}
}
protected void btnGroup1_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
lblMessage.Text = "Button with Group1 validation group was clicked";
}
}
protected void btnGroup2_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
lblMessage.Text = "Button with Group2 validation group was clicked";
}
}
}
Run Code Online (Sandbox Code Playgroud)
一种不涉及编写任何额外代码的更简单方法是在需要的地方简单地复制验证器,如下面的示例所示:
<div>
<asp:TextBox ID="txt1" runat="server" placeholder="field1" />
<asp:RequiredFieldValidator runat="server" ID="req1a" ControlToValidate="txt1" ValidationGroup="group1" Display="Dynamic" />
<asp:RequiredFieldValidator runat="server" ID="req1b" ControlToValidate="txt1" Display="Dynamic" />
</div>
<div>
<asp:TextBox ID="txt2" runat="server" placeholder="field2" />
<asp:RequiredFieldValidator runat="server" ID="req2" ControlToValidate="txt2" />
</div>
<!-- Validate validators with empty ValidationGroup -->
<asp:Button runat="server" ID="btn1" Text="Validate All" />
<!-- Validate group1 validators -->
<asp:Button runat="server" ID="btb2" Text="Validate Group 1" ValidationGroup="group1"/>
Run Code Online (Sandbox Code Playgroud)
第一个按钮将验证两个文本框,即使它们位于不同的组中,而第二个按钮将仅验证第一个文本框。
| 归档时间: |
|
| 查看次数: |
24106 次 |
| 最近记录: |