7

javascript の xmlhttprequest オブジェクトを介して呼び出されるメソッドを持つ Web サービスがあります。このメソッドは日時パラメータを受け取り、その後文字列に変換され、データベースに対して実行されて計算が実行されます。

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% の確率で機能します。Web サービスは、m_txtDateAdd の onchange イベントで呼び出されます。時々、サーバーからの応答は

System.ArgumentException: 25/06/2009 を System.DateTime に変換できません。System.ArgumentException: 25/06/2009 を System.DateTime に変換できません。

パラメータ名: type ---> System.FormatException: String は有効な DateTime として認識されませんでした。

   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 を使用しているのですか? Add Service Reference を使用しないのはなぜですか?

于 2009-07-10T14:43:57.610 に答える
5

2001-10-26T19:32:52Z

このようなフォーマットを使用してください。

于 2012-08-01T18:41:22.343 に答える
0

GetTotalCost()に渡すDateTimeをどのように作成していますか?

から正しいコンストラクターのオーバーロードを取得しましたか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 に答える