2009-07-10 5 views
7

자바 스크립트에서 xmlhttprequest 개체를 통해 호출되는 메서드가있는 webservice가 있습니다. 이 메서드는 datetime 매개 변수를 받아들이고 나중에 문자열로 변환되어 데이터베이스에서 실행되어 계산을 수행합니다.웹 서비스의 올바른 DateTime 형식

나는 m_txtDateAdd에서 값을 얻을

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

내의 WebMethod이

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

I과 같은 형태 그것에 attacted 발리가있는 XMLHttpRequest의

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

을 보내 sqlDateString을 commandtext의 일부로 사용하여 데이터베이스로 보냅니다. 그것의 레거시 응용 프로그램과 인라인 SQL 그래서 나는 저장 프로 시저를 설정하고 내 코드에 매개 변수를 할당 할 자유가 없습니다. 이것은 90 %의 시간 동안 작동합니다. webservice는 m_txtDateAdd의 onchange 이벤트에서 호출됩니다. 때때로 나는 서버로부터 얻는 응답은

입니다. System.ArgumentException : 25/06/2009를 System.DateTime으로 변환 할 수 없습니다. System.ArgumentException : 25/06/2009를 System.DateTime으로 변환 할 수 없습니다.

매개 변수 이름 : type ---> System.FormatException : 문자열이 유효한 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() 
+0

맞춤 검사기 코드를 표시 할 수 있습니까? serializer는 몇 가지 기본 형식 만 이해할 수있는 기본 형식을 사용하여 문자열을 변환하려고 시도합니다. 유효성 검사기는 알려진 형식이 제출되고 있는지 확인해야합니다. –

+0

표준 asp.net 사용자 정의 유효성 검사기입니다. 내 자신의 것을 작성하지 않았습니다. – user48408

답변

10

XML : 2009-07-10T12 : 40Z의 올바른 형식으로 DateTime을 보내야합니다. http://en.wikipedia.org/wiki/ISO_8601에서.


왜 HttpRequest를 사용하고 있습니까? 서비스 참조 추가 만 사용하면 안됩니까?

+0

XML에 올바른 형식이 없지만 XML 스키마에 올바른 형식이 있습니다. 두 사람을 조심하지 마십시오. XML 소비자가 자바 스크립트 클라이언트 인 경우 ISO 날짜 형식이 유용하지 않을 수 있습니다. – skaffman

+0

그의 서비스는 DateTime을 허용합니다. XML Serializer는 IXmlSerializable이 구현되어 있지 않으면 XSD 형식을 사용하여 deserialize 및 serialize합니다.이 형식은 DateTime에 없습니다. –

+0

중요한 것은 데이터가 시간의 90 % 이상을 성공적으로 반환했다고합니다. 반복적으로 날짜를 변경하면 결국 예외가 발생하지만 2009 년 1 월 7 일을 반복해서 입력하면 결국 실패하게됩니다. xmlhttprequest를 사용하여 전체 페이지 새로 고침을 얻지 마십시오 – user48408

0

문자열 값을 텍스트 상자에서 webservice로 직접 전달하고 있습니까? 사용자 입력 문자열을 javascript Date 객체로 구문 분석하고 Date 객체를 webservice에 전달하고 Microsoft의 ajax 라이브러리에서 serializer가 형식을 지정하는 방법을 파악하는 것이 더 안정적입니다.

가치를 얻고 웹 서비스를 호출하는 클라이언트 측 JavaScript 코드를 보는 것이 도움이 될 수 있습니다.

3

2001-10-26T19 : 32 : 52Z

이러한 형식을 사용하십시오.