ASP.NET 2.0。假设我有两个验证组valGrpOne和valGrpTwo;和两个验证摘要valSummOne和valSummTwo;分解部分的原因纯粹是美学。一个提交按钮,触发两个组的验证。
现在我想触发客户端验证,并希望同时显示BOTH验证摘要;
所以我设置了一个在btnSubmit上调用的Javascript函数,在这个函数中我连续调用Page_ClientValidate("valGrpOne")
和Page_ClientValidate("valGrpTwo")
;问题只是一次显示一个摘要(但我真的希望两者都显示!)
关于如何从客户端代码同时显示两个验证摘要的任何想法?
非常类似于以下问题,它为服务器端提供了答案。 Triggering multiple validation groups with a single button?
答案 0 :(得分:30)
好的,所以答案并不简单。似乎客户端验证的默认行为是仅显示刚刚验证过的最新组/摘要。但是一些Javascript tweeking给了我一个可以接受的答案。
随意提供改进。
<script type="text/javascript" language="javascript">
/* Manual client-side validation of Validator Groups */
function fnJSOnFormSubmit() {
var isGrpOneValid = Page_ClientValidate("valGrpOne");
var isGrpTwoValid = Page_ClientValidate("valGrpTwo");
var i;
for (i = 0; i < Page_Validators.length; i++) {
ValidatorValidate(Page_Validators[i]); //this forces validation in all groups
}
//display all summaries.
for (i = 0; i < Page_ValidationSummaries.length; i++) {
summary = Page_ValidationSummaries[i];
//does this summary need to be displayed?
if (fnJSDisplaySummary(summary.validationGroup)) {
summary.style.display = ""; //"none"; "inline";
}
}
if (isGrpOneValid && isGrpTwoValid)
return true; //postback only when BOTH validations pass.
else
return false;
}
/* determines if a Validation Summary for a given group needs to display */
function fnJSDisplaySummary(valGrp) {
var rtnVal = false;
for (i = 0; i < Page_Validators.length; i++) {
if (Page_Validators[i].validationGroup == valGrp) {
if (!Page_Validators[i].isvalid) { //at least one is not valid.
rtnVal = true;
break; //exit for-loop, we are done.
}
}
}
return rtnVal;
}
</script>
答案 1 :(得分:5)
这是另一种用于验证多个组的简单通用方法。
// Page_ClientValidate only shows errors from the last validation group.
// This method allows showing for multiple groups
function Page_ClientValidateMultiple(groups) {
var invalidIdxs = [];
var result = true;
// run validation from each group and remember failures
for (var g = 0; g < groups.length; g++) {
result = Page_ClientValidate(groups[g]) && result;
for (var v = 0; v < Page_Validators.length; v++)
if (!Page_Validators[v].isvalid)
invalidIdxs.push(v);
}
// re-show any failures
for (var i = 0; i < invalidIdxs.length; i++) {
ValidatorValidate(Page_Validators[invalidIdxs[i]]);
}
// return false if any of the groups failed
return result;
};
答案 2 :(得分:3)
未经过全面测试:
/* Manual client-side validation of Validator Groups - Remix */
function PageValidate() {
var PageIsValid = true;
for (var validator in Page_Validators) {
ValidatorValidate(validator);
PageIsValid = PageIsValid && validator.isvalid;
}
if (PageIsValid) {
return true; //postback only when ALL validations pass.
}
else {
return false;
}
}
/* This also does something similar */
function PageValidate() {
return Page_ClientValidate();
}
答案 3 :(得分:0)
这是joedotnot有用代码的扩展。对于大多数asp.net用户来说,它可能有点过分,但这有助于一个项目,在提交时必须应用不同的验证组组合,具体取决于选择了哪些按钮。
var validationManager = function () {
// Manual client-side validation of Validator Groups
// an empty string('') is default - to validate controls without a validation group
var valGroups = [''],
returnObj = { //define methods
set: function (/*string argument list*/) {
valGroups = Array.prototype.slice.call(arguments);
return returnObj;
},
add: function (/*string argument list*/) {
var i;
for (i = 0; i < arguments.length; i++) {
if (valGroups.indexOf(arguments[i]) === -1) {
valGroups.push(arguments[i]);
}
}
return returnObj;
},
remove: function (/*string argument list*/) {
var i = 0, n = 0;
for (i = 0; i < arguments.length; i++) {
var n = valGroups.indexOf(arguments[i]);
if (n > -1) valGroups.splice(n, 1);
}
return returnObj;
},
validate: function () {
var i = 0,
summariesToDisplay = [];
for (; i < valGroups.length; i++) {
if (!Page_ClientValidate(valGroups[i])) { //this will display the contents of the validator
summariesToDisplay.push(valGroups[i]);
}
}
if (!summariesToDisplay.length) { return true; }
for (i = 0; i < Page_ValidationSummaries.length; i++) { //make relevant summaries visible
if (summariesToDisplay.indexOf(Page_ValidationSummaries[i].validationGroup || '') > -1) {
Page_ValidationSummaries[i].style.display = "inline"; //"none"; "inline";
}
}
return false;
}
};
if (arguments.length > 0) {
returnObj.set.apply(null, arguments);
}
return returnObj;
}
然后在各种事件处理程序中:
//set up a global object
var validateOnSubmit = validationManager('','BMIvalGrp');
//within a radio click handler
validateOnSubmit.add('weightValGrp','ageValGrp')
.remove('BMIvalGrp');
//added to submit button handlers
validateOnSubmit.validate();
答案 4 :(得分:0)
这是保持简单,一个非常简单的例子:
在页面标题中使用以下javascript方法: -
<script type="text/javascript" language="javascript">
function ShowModalDialog4Validations() {
var x = $find("modalPopupExtenderValidations");
Page_ClientValidate("vgValidations");
if (!Page_IsValid)
x.show();
}
modalPopupExtenderValidations是模态弹出窗口的ID。 vgValidations是验证组的ID。
现在,在页面预渲染方法中,将onclick属性添加到您希望进行验证的按钮上。
protected void Page_PreRender(object sender, EventArgs e)
{
btnMyButton.Attributes.Add("onclick", "ShowModalDialog4Validations();");
}
我希望它易于理解。
再见。
答案 5 :(得分:0)
<b>Lets Say here is u r link button</b>
<asp:LinkButton ID="lnkbtnSubmit" runat="server" OnClientClick="return fnJSOnFormSubmit();" meta:resourcekey="lnkbtnSubmitResource1">Submit</asp:LinkButton>
<b> And u r Script is</b>
<script type="text/javascript">
function confirmAction() {
var retVal = confirm("Are you sure want to continue ?");
if (retVal == true) {
return true;
}
else {
return false;
}
}
function fnJSOnFormSubmit() {
var isGrpOneValid = Page_ClientValidate("updateuser");
var isGrpTwoValid = Page_ClientValidate("BaseKey");
var i;
for (i = 0; i < Page_Validators.length; i++) {
ValidatorValidate(Page_Validators[i]); //this forces validation in all groups
}
isGrpOneValid = Page_ClientValidate("updateuser");
isGrpTwoValid = Page_ClientValidate("BaseKey");
i =0;
for (i = 0; i < Page_Validators.length; i++) {
ValidatorValidate(Page_Validators[i]); //this forces validation in all groups
}
if (isGrpOneValid && isGrpTwoValid)
return true; //postback only when BOTH validations pass.
else
return false;
}
/* determines if a Validation Summary for a given group needs to display */
function fnJSDisplaySummary(valGrp) {
var rtnVal = false;
for (i = 0; i < Page_Validators.length; i++) {
if (Page_Validators[i].validationGroup == valGrp) {
if (!Page_Validators[i].isvalid) { //at least one is not valid.
rtnVal = true;
break; //exit for-loop, we are done.
}
}
}
return rtnVal;
}
</script>