在我的提交按钮上,我想要做的是OnClick显示“请等待”面板并隐藏按钮,除非验证器说某些内容无效 - 然后我需要按钮仍显示。否则,我有一个显示错误的验证摘要,无法再次提交。
我发现大多数关于这样做的文章都希望使用Page_ClientValidate()函数来告诉页面验证自己,但这对我来说是未定义的,就像Page_IsValid变量一样。这是我正在尝试使用的功能 - 我缺少什么?:
function PleaseWaitShow() {
try {
alert("PleaseWaitShow()");
var isPageValid = true;
// Do nothing if client validation is not active
if (typeof(Page_Validators) == "undefined") {
if (typeof(Page_ClientValidate) == 'function') {
isPageValid = Page_ClientValidate();
alert("Page_ClientValidate returned: " + isPageValid);
alert("Page_IsValid=" + Page_IsValid);
} else {
alert("Page_ClientValidate function undefined");
}
} else {
alert("Page_Validators undefined");
}
if(isPageValid) {
// Hide submit buttons
document.getElementById('pnlSubmitButton').style.visibility = 'hidden';
document.getElementById('pnlSubmitButton').style.display = 'none';
// Show please wait panel
document.getElementById('pnlPleaseWait').style.visibility = 'visible';
document.getElementById('pnlPleaseWait').style.display = 'block';
} else {
alert("page not valid - don't show please wait");
}
} catch(er) {
alert("ERROR in PleaseWaitShow(): " + er);
}
}
答案 0 :(得分:8)
更改此行“if(typeof(Page_Validators)==”undefined“)”to if(typeof(Page_Validators)!=“undefined”)
答案 1 :(得分:5)
根据“ASP.NET Validation in depth”页面上的“客户端API”部分:
Page_IsValid |布尔变量|指示页面当前是否有效。验证脚本始终保持最新状态。
确实,在启用了ASP.NET客户端验证的表单上的FireBug中观察此变量时,它会在我填写表单的详细信息(错误或正确)时更新。
显然,如果您在验证程序或验证摘要中禁用了客户端脚本,那么您将无法使用此变量。
答案 2 :(得分:4)
请检查
if(Page_IsValid)
{
//Yourcode
}
如果您在页面中有验证器,这将排除验证摘要。
答案 3 :(得分:0)
Page_ClientValidate()不是我所知道的任何标准javascript函数
答案 4 :(得分:0)
我相信我找到了一种“某种”答案。
我仍然无法确定为什么我的网页无法识别“Page_ClientValidate()”或“Page_IsValid” - 此部分仍无法回答。
但是,我在页面上使用了许多PeterBlum验证器,并且这些验证器提供了返回true / false的“VAM_ValOnSubmit()”。所以这可能是解决方案。我可能只需要确保所有验证器都是PeterBlum来捕获它们。
不是最好的解决方案,但比我到目前为止要好。我仍然对“Page_IsValid”部分的答案持开放态度。
答案 5 :(得分:0)
有关于此主题的ASP.Net论坛主题:Button that prevents multiple clicks
这是解决方案(在后面的代码中):
private void BuildClickOnceButton(WebControl ctl)
{
System.Text.StringBuilder sbValid = new System.Text.StringBuilder();
sbValid.Append("if (typeof(Page_ClientValidate) == 'function') { ");
sbValid.Append("if (Page_ClientValidate() == false) { return false; }} ");
sbValid.Append(ctl.ClientID + ".value = 'Please wait...';");
sbValid.Append(ctl.ClientID + ".disabled = true;");
//GetPostBackEventReference obtains a reference to a client-side script function that causes the server to post back to the page.
sbValid.Append(ClientScript.GetPostBackEventReference(ctl, ""));
sbValid.Append(";");
ctl.Attributes.Add("onclick", sbValid.ToString());
}