7

我有一个 web 服务,其方法通过我的 javascript 中的 xmlhttprequest 对象调用。该方法接受一个 datetime 参数,该参数随后被转换为字符串并针对数据库运行以执行计算。

我从 m_txtDateAdd 获取值并发送 xmlHttprequest

<asp:textbox id=m_txtDateAdd tabIndex=4 runat="server" Width="96px" Text="<%# Today %>">
</asp:textbox>

有一个验证器连接到它

<asp:CustomValidator id="m_DateAddValidator" runat="server" ErrorMessage="Please Enter a Valid Date" ControlToValidate="m_txtDateAdd">&#x25CF;</asp:CustomValidator>

我的网络方法看起来像这样

[WebMethod]
public decimal GetTotalCost(DateTime transactionDate)
{
    String sqlDateString = transactionDate.Year+"/"+transactionDate.Month+"/"+transactionDate.Day;

我使用 sqlDateString 作为我发送到数据库的命令文本的一部分。它是一个遗留应用程序及其内联 sql,因此我无法自由设置存储过程并在我的代码中创建和分配参数。这在 90% 的时间里都有效。在 m_txtDateAdd 的 onchange 事件上调用 Web 服务。我时不时地从服务器得到的响应是

System.ArgumentException:无法将 25/06/2009 转换为 System.DateTime。System.ArgumentException:无法将 25/06/2009 转换为 System.DateTime。

参数名称:类型---> System.FormatException:字符串未被识别为有效的日期时间。

   at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
   at System.DateTime.Parse(String s, IFormatProvider provider)
   at System.Convert.ToDateTime(String value, IFormatProvider provider)
   at System.String.System.IConvertible.ToDateTime(IFormatProvider provider)
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   --- End of inner exception stack trace ---
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
   at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
   at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
4

4 回答 4

11

您需要以正确的 XML 格式发送 DateTime:2009-07-10T12:40Z。来自http://en.wikipedia.org/wiki/ISO_8601


另外,为什么要使用 HttpRequest?为什么不直接使用添加服务参考?

于 2009-07-10T14:43:57.610 回答
5

2001-10-26T19:32:52Z

使用这种格式。

于 2012-08-01T18:41:22.343 回答
0

您如何创建 DateTime 以传递给 GetTotalCost()?

你有没有从正确的构造函数重载http://msdn.microsoft.com/en-us/library/system.datetime.aspx

于 2009-07-10T15:11:34.337 回答
0

您是否将文本框中的字符串值直接传递给 Web 服务?将用户输入的字符串解析为 javascript Date 对象,将 Date 对象传递给 Web 服务,并让 Microsoft 的 ajax 库中的序列化程序确定如何格式化它会更可靠。

查看获取值并调用 Web 服务的客户端 JavaScript 代码可能会有所帮助。

于 2010-03-30T18:22:19.453 回答