我有一个让我发疯的问题。在我的页面上,我有一个 Javascript验证和两个 ASP.NET验证器。验证结果仅取决于Javascript的结果。这意味着如果Javascript返回 true ,则不会检查ASP.NET验证程序。
Javascript 代码为:
<script type="text/javascript">
function Validate() {
var ddlObj = document.getElementById('<%=ddStatus.ClientID%>');
var txtObj = document.getElementById('<%=txtComment.ClientID%>');
if (ddlObj.selectedIndex != 0) {
if (txtObj.value == "") {
alert("Any change of Status requires a comment!");
txtObj.focus();
return false;
}
}
}
</script>
相反,两个 ASP.NET验证程序是:
<td><asp:TextBox runat="server" ID="txtSerialNr" ></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ControlToValidate="txtSerialNr" ErrorMessage="***" />
</td>
<td><asp:TextBox runat="server" ID="txtProdName" ></asp:TextBox>
<asp:RequiredFieldValidator runat="server" ID="rfv1" ControlToValidate="txtProdName" ErrorMessage="***"></asp:RequiredFieldValidator></td>
有人可以帮忙吗?感谢
更新:
我从按钮调用Javascript:
<asp:Button runat="server" ID="btnSubmit" Text="Save New Product"
style="cursor:hand" OnClick="btnSubmit_Click" />
但是我从代码隐藏
注册属性protected void Page_Load(object sender, EventArgs e)
{
btnSubmit.Attributes.Add("OnClientClick", "return Validate()");
}
答案 0 :(得分:1)
好的,这里有一些问题。
如果您足够关注验证,除了客户端之外,您还必须始终进行服务器端验证。客户端验证非常用户友好且响应速度快,但只需将JavaScript设置为“关闭”即可绕过它!
我没有看到你告诉你的控件哪些JavaScript函数在验证时要调用?您使用不需要外部函数的RequiredFieldValidators
- 然后使用Validate()
函数尝试自定义验证。
如果你做最终使用CustomValidator
,那么你需要更改你的功能的'签名'。它必须是
function validateIt(sender, args){
var testResult = //your validation test here
args.IsValid = testResult;
}
答案 1 :(得分:1)
您可以在Validate()
函数中激活客户端验证:
validate = function(){
bool isValid = Page_ClientValidate(""); //triggers validation
if (isValid){
var ddlObj = document.getElementById("<%=ddStatus.ClientID%>");
var txtObj = document.getElementById("<%=txtComment.ClientID%>");
if (ddlObj.selectedIndex != 0) {
if (txtObj.value == "") {
alert("Any change of Status requires a comment!");
txtObj.focus();
isValid = false;
}
}
}
return isValid;
}
标记:
<asp:Button runat="server" OnClientClick="return validate();" ... />