分享

Ajax 与 WebService 之间日期等数据类型的转换

 昵称9204057 2012-03-21

德可以分为两种:一种是聪明的德,另一种是行动的德。前者是从进修中得来的,后者是从实践中得来的。天公布了 JQueryElement 3.6.0 主如果增长了一个验证的插件和数据转化功能的加强, 但此次并不是要说新参加的验证插件, 而是申明 Ajax 传递的数据类型和 WebService 所需的类型不应时, 产生的景象, 以及处理惩罚特别的日期格局的题目.

人类是生成社会性动物。示例代码下载: http://zsharedcode./files/JQueryElementDemo.rar

本文将申明在应用 Ajax 调用 WebService 时, 客户端和办事器端的数据类型转换:

  * 筹办

   * WebService 转换数据类型

   * 经由过程 Parameter 在客户端转化数据类型

   * 数据类型转换失败时

   * 日期类型

筹办

请先查看 http://code.google.com/p/zsharedcode/wiki/AjaxReturnJSON 或者筹办一节的内容. 本文中的代码可以在 .NET 2.0 下运行, 不合版本中可能须要稍作批改.

WebService 转换数据类型

在 ASP.NET 中, 若是从客户端传递的参数类型和 WebService 所须要的参数类型不合, 则办事器端将试图将参数转化为所需的类型.

若是, 在 WebService 中拥有一个名为 StringToString 的办法:

[WebMethod]
[ScriptMethod]
public string StringToString ( string value )
{
this.Context.Response.Cache.SetNoStore ( );

return string.Format ( "{0}", value );
}

StringToString 办法具有一个 string 类型的参数 value, 若是在客户端传递的 value 参数的类型为数值, 布尔值, 则将主动的转化为字符串.

下面是应用 JQueryElement 的 Button 控件来调用 WebService 的代码:

<je:Button ID="cmdString3" runat="server"
Label="传递布尔值 false 到 string StringToString(string)">
<ClickAsync Url="webservice.asmx" MethodName="StringToString" Success="
function(data){
alert(data);
}
">
<ParameterList>
<je:Parameter Name="value" Type="Expression" Value="true"
DataType="Boolean"/>
</ParameterList>
</ClickAsync>
</je:Button>

经由过程 ClickAsync 来设置点击按钮时的 Ajax 操纵, 在 Parameter 中, 设置 DataType 为 Boolean 来明白的默示传递给办事器的是一个布尔值, Type 为 Expression 默示 Value 中的是一个 javascript 表达式.

上方的代码传递布尔值 true 给办法 StringToString, 而 StringToString 须要一个字符串, 是以 ASP.NET 会主动的将 true 转化为字符串, 最后的成果将弹出 True.

ASP.NET 可以将传递来的数值, 布尔值转化为字符串. 可以将传递来的默示数字的字符串转化为数值类型, 比如将 "123" 转化为 123. 可以将字符串 "true" 或 "false" 转化为布尔值. 可以将空字符串或情势类似于 "2011-1-1 11:33:44" 的字符串转化为日期类型.

经由过程 Parameter 在客户端转化数据类型

在 JQueryElement 中, 可以应用 Parameter 来在客户端转化数据类型. 比如: 经由过程 jQuery 的 val 办法, 可以获取到文本框的值, 这个值是一个字符串, 应用 DataType 来选择须要转化为的类型.

<input type="text" id="txtInt1"/>
<je:Button ID="cmdInt1" runat="server"
Label="传递数值到 string IntToString(int)">
<ClickAsync Url="webservice.asmx" MethodName="IntToString" Success="
function(data){
¥(""#lblInt1"").text(""返回 "" + data + "", 类型为: "" + typeof data);
}
">
<ParameterList>
<je:Parameter Name="value" Type="Selector" Value="""#txtInt1"""
DataType="Number"/>
</ParameterList>
</ClickAsync>
</je:Button>
<p id="lblInt1"></p>

代码中, 设置 DataType 为 Number, 那么在恳求之前, 文本框 txtInt1 中的内容将转化为数值.

数据类型转换失败时

若是, ASP.NET 在转换数据时产生错误, 那么将向客户端返回一个错误, 可以经由过程Async 的 Error 来处理惩罚:

<input type="text" id="txtInt1"/>
<je:Button ID="cmdInt1" runat="server"
Label="传递字符串到 string IntToString(int)">
<ClickAsync Url="webservice.asmx" MethodName="IntToString" Success="
function(data){
¥(""#lblInt1"").text(""返回 "" + data + "", 类型为: "" + typeof data);
}
" Error="
function(data){
alert(data.responseText);
}
">
<ParameterList>
<je:Parameter Name="value" Type="Selector" Value="""#txtInt1"""
DataType="String"/>
</ParameterList>
</ClickAsync>
</je:Button>
<p id="lblInt1"></p>

代码中, 将文本框中的字符串传递给了 IntToString 办法, 是以当输入类似于 "abc" 如许的字符串时将产生错误, 在 Error 中经由过程 data.responseText 即可获取从办事器返回的错误消息.

若是是经由过程 Parameter 的 DataType 来转化数据类型, 在转化失败时, 将应用默认值来庖代. 布尔值默认 true, 数值默认 0, 日期默认为当前时候.

日期类型

从办事器返回的日期类型默认为 "/Date(xxxxxxxxxx)/" 的情势, 是一个字符串, 可以经由过程 jQuery.panzer.formatDate 函数来格局化日期, 或者应用 jQuery.panzer.convertToDate 将 "/Date(xxxxxxxxxx)/" 格局的字符串转化为日期类型.

若是是从客户端发送日期到办事器, 则可以发送一个可以默示日期的字符串即可, 比如:

[WebMethod]
[ScriptMethod]
public string DateToString ( DateTime value )
{
this.Context.Response.Cache.SetNoStore ( );

return string.Format ( "{0}", value );
}

<je:Button ID="cmdDate2" runat="server"
Label="传递日期到 string DateToString(DateTime)">
<ClickAsync Url="webservice.asmx" MethodName="DateToString" Success="
function(data){
alert(data);
}
">
<ParameterList>
<je:Parameter Name="value" Type="Expression" Value="new Date()"
DataType="Date" />
</ParameterList>
</ClickAsync>
</je:Button>

经由过程 Parameter 的设置, 将日期转化为可以被办事器端识此外当前日期的字符串情势.

JQueryElement 是开源共享的代码, 可以在 http://code.google.com/p/zsharedcode/wiki/Download 页面下载 dll 或者是源代码.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多