看到了新的asp.net ajax toolkit中的ValidatorCalloutExtender控件的效果,酷极了,尝试应用,学习吗,就要不断地挑战自己!!!
果不其然,碰到问题了!
<
div
class
="linelist"
>
< label id ="cardnumber" class ="label" > 积分卡号: </ label >< asp:TextBox ID ="card_number" runat ="server" CssClass ="textbox" ></ asp:TextBox >
</ div >
<!-- 检验积分卡号码的长度是否是5位,并提示错误 -->
< asp:CustomValidator Display ="None" runat ="server" ID ="CardNumberCReq" ControlToValidate ="card_number" ClientValidationFunction ="CardNumberValidation" ErrorMessage ="<b>积分卡的卡号格式不正确</b><br />请输入由5个数字组成的积分卡卡号" ></ asp:CustomValidator >
< ajaxToolkit:ValidatorCalloutExtender runat ="Server" ID ="CardNumberReqL" TargetControlID ="CardNumberCReq" HighlightCssClass ="highlight" />
<!-- 检验积分卡的号码是否已经存在,如果在数据库中存在,提示错误信息 -->
< asp:CustomValidator Display ="None" runat ="server" ID ="CardNumberIsOk" ControlToValidate ="card_number" ClientValidationFunction ="CardNumberIsOk" ErrorMessage ="<b>这张积分卡已经发行过了!!!</b><br />请检查您所输入的积分卡卡号" ></ asp:CustomValidator >
< ajaxToolkit:ValidatorCalloutExtender runat ="Server" ID ="CardNumberIsOkMessage" TargetControlID ="CardNumberIsOk" HighlightCssClass ="highlight" />
第一组控件检测了该TEXTBOX空间的输入内容是否为5位长,因javascript校验代码比较简单,我在此就不贴出来了。
< label id ="cardnumber" class ="label" > 积分卡号: </ label >< asp:TextBox ID ="card_number" runat ="server" CssClass ="textbox" ></ asp:TextBox >
</ div >
<!-- 检验积分卡号码的长度是否是5位,并提示错误 -->
< asp:CustomValidator Display ="None" runat ="server" ID ="CardNumberCReq" ControlToValidate ="card_number" ClientValidationFunction ="CardNumberValidation" ErrorMessage ="<b>积分卡的卡号格式不正确</b><br />请输入由5个数字组成的积分卡卡号" ></ asp:CustomValidator >
< ajaxToolkit:ValidatorCalloutExtender runat ="Server" ID ="CardNumberReqL" TargetControlID ="CardNumberCReq" HighlightCssClass ="highlight" />
<!-- 检验积分卡的号码是否已经存在,如果在数据库中存在,提示错误信息 -->
< asp:CustomValidator Display ="None" runat ="server" ID ="CardNumberIsOk" ControlToValidate ="card_number" ClientValidationFunction ="CardNumberIsOk" ErrorMessage ="<b>这张积分卡已经发行过了!!!</b><br />请检查您所输入的积分卡卡号" ></ asp:CustomValidator >
< ajaxToolkit:ValidatorCalloutExtender runat ="Server" ID ="CardNumberIsOkMessage" TargetControlID ="CardNumberIsOk" HighlightCssClass ="highlight" />
第二组空间,需要检测输入的记分卡号,在数据库中,是否存在,因为以前的代码中使用的就是webservice校验,所以还是不想修改太多的代码,就直接去套用了以前的webservice.
下面贴出javascript校验函数的代码:
function
CardNumberIsOk(source, arguments)
{
Ywlj.Card_number_verived(arguments.Value,CardNumberIsOkResult);
}
代码中的:Ywlj.Card_number_verived(arguments.Value,CardNumberIsOkResult);为标准的asp.net ajax调用webservice的标准用法。
{
Ywlj.Card_number_verived(arguments.Value,CardNumberIsOkResult);
}
Ywlj.Card_number_verived为webservice中的WebMethod,作用为检验输入的积分卡号在数据库中是否已经存在,返回值为Bool型。
CardNumberIsOkResult为WebMethod的回调函数,代码如下:
function
CardNumberIsOkResult(result)
{
//alert(result);
//$get("<%=this.CardNumberIsOk%>").ClientID.IsValid = result;
}
但是问题出现了:
{
//alert(result);
//$get("<%=this.CardNumberIsOk%>").ClientID.IsValid = result;
}
显示返回值正确,但是将返回值赋给验证控件时,提示为:
Microsoft JScript 运行时错误: 缺少对象。
我尝试过用各种办法来获得验证控件的对象,但是都不成功。
后来我跟踪了运行代码,发现客户端校验函数中:
function CardNumberIsOk(source, arguments)
arguments有连个属性,一个是需要校验的内容,一个就是IsValid属性。
但是我尝试过这种用法:
var
obj;
function CardNumberIsOk(source, arguments)
{
obj = arguments;
Ywlj.Card_number_verived(arguments.Value,CardNumberIsOkResult);
}
function CardNumberIsOkResult(result)
{
obj.IsValid = result;
}
但是还是不成功,验证控件没有发挥作用。
function CardNumberIsOk(source, arguments)
{
obj = arguments;
Ywlj.Card_number_verived(arguments.Value,CardNumberIsOkResult);
}
function CardNumberIsOkResult(result)
{
obj.IsValid = result;
}
我试验过,如果这样用:
function
CardNumberIsOk(source, arguments)
{
arguments.IsValid = false;
//Ywlj.Card_number_verived(arguments.Value,CardNumberIsOkResult);
}
验证控件就发挥了作用。
{
arguments.IsValid = false;
//Ywlj.Card_number_verived(arguments.Value,CardNumberIsOkResult);
}
我又跟踪了source,发现它就是CardNumberIsOk验证控件,但是它已经变成了一个<span>对象。其余的细节就跟踪不到了。
我已经束手无策了,那位高人走过路过,千万要帮帮忙看看那!!!谢谢
不要和我说用同步的Webservice调用啊,那我为什么还要用asp.net ajax?