有一个公司的小项目,尝试着用Atlas进行修改,完成了80%,哈哈,微软又把Atlas改成了asp.net ajax,得,一切又要从头再来。
看到了新的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校验代码比较简单,我在此就不贴出来了。
第二组空间,需要检测输入的记分卡号,在数据库中,是否存在,因为以前的代码中使用的就是webservice校验,所以还是不想修改太多的代码,就直接去套用了以前的webservice.
下面贴出javascript校验函数的代码:
function
CardNumberIsOk(source, arguments)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
Ywlj.Card_number_verived(arguments.Value,CardNumberIsOkResult);
}
代码中的:Ywlj.Card_number_verived(arguments.Value,CardNumberIsOkResult);为标准的asp.net ajax调用webservice的标准用法。
Ywlj.Card_number_verived为webservice中的WebMethod,作用为检验输入的积分卡号在数据库中是否已经存在,返回值为Bool型。
CardNumberIsOkResult为WebMethod的回调函数,代码如下:
function
CardNumberIsOkResult(result)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
//alert(result);
//$get("<%=this.CardNumberIsOk%>").ClientID.IsValid = result;
}
但是问题出现了:
显示返回值正确,但是将返回值赋给验证控件时,提示为:
Microsoft JScript 运行时错误: 缺少对象。
我尝试过用各种办法来获得验证控件的对象,但是都不成功。
后来我跟踪了运行代码,发现客户端校验函数中:
function CardNumberIsOk(source, arguments)
arguments有连个属性,一个是需要校验的内容,一个就是IsValid属性。
但是我尝试过这种用法:
var
obj;
function
CardNumberIsOk(source, arguments)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
obj = arguments;
Ywlj.Card_number_verived(arguments.Value,CardNumberIsOkResult);
}
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
function
CardNumberIsOkResult(result)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
obj.IsValid = result;
}
但是还是不成功,验证控件没有发挥作用。
我试验过,如果这样用:
function
CardNumberIsOk(source, arguments)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
arguments.IsValid = false;
//Ywlj.Card_number_verived(arguments.Value,CardNumberIsOkResult);
}
验证控件就发挥了作用。
我又跟踪了source,发现它就是CardNumberIsOk验证控件,但是它已经变成了一个<span>对象。其余的细节就跟踪不到了。
我已经束手无策了,那位高人走过路过,千万要帮帮忙看看那!!!谢谢
不要和我说用同步的Webservice调用啊,那我为什么还要用asp.net ajax?