我已经创建了一个用户控件(来自System.Web.UI.UserControl),并为用户控件创建了自己的验证器(来自System.Web.UI.WebControls.BaseValidator)。一切正常,直到我尝试让用户控件进行客户端验证。
在尝试调试此问题时,我已将“Control to Validate”设置为文本框而不是自定义用户控件,并且客户端脚本工作正常!在我看来,我创建的复合用户控件存在问题。有没有人遇到过这个问题?有没有其他人看到客户端验证在自定义用户控件上失败?
一些额外信息:
复合控件是一个下拉列表和'加载器图像',因为它是一个启用了ajax的下拉列表(使用ICallbackEventHandler)。我知道客户端javascript正在写入页面,并且已经发出警报(“随机消息”)作为验证器函数中的第一行,只有在验证文本框时才会出现(即不是在验证时)我的自定义控件)
语言:C#(ASP.NET 2.0)和jQuery 1.2.6
在aspx文件中:
<rms:UserDDL ID="ddlUserTypes" runat="server" PreLoad="true" />
<rms:DDLValidator
ID="userTypesVal"
ControlToValidate="ddlUserTypes"
ErrorMessage="You have not selected a UserType"
runat="server"
Text="You have not selected a UserType"
Display="Dynamic"
EnableClientScript="true" />
中的验证码中的
protected string ScriptBlock
{
get
{
string nl = System.Environment.NewLine;
return
"<script type=\"text/javascript\">" + nl +
" function " + ScriptBlockFunctionName + "(ctrl)" + nl +
" {" + nl +
" alert('Random message'); " + nl +
" var selVal = $('#' + ctrl.controltovalidate).val(); " + nl +
" alert(selVal);" + nl +
" if (selVal === '-1') return false; " + nl +
" return false; " + nl +
" }" + nl +
"</script>";
}
}
protected override void OnPreRender(EventArgs e)
{
if (this.DetermineRenderUplevel() && this.EnableClientScript)
{
Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "evaluationfunction", this.ScriptBlockFunctionName);
Page.ClientScript.RegisterClientScriptBlock(GetType(), this.ScriptBlockKey, this.ScriptBlock);
}
base.OnPreRender(e);
}
我知道我的ControlPropertiesValid()和EvaluateIsValid()工作正常。
我对此问题表示感谢。
诺尔。
答案 0 :(得分:0)
尝试使用CustomValidator而不是BaseValidator:
http://msdn.microsoft.com/en-us/library/9eee01cx(VS.71).aspx
设置ClientValidationFunction以确保调用JS: