Tengo un servicio web con un método que se llama mediante un objeto xmlhttprequest en mi javascript. El método acepta un parámetro de fecha y hora que posteriormente se convierte en una cadena y se ejecuta contra la base de datos para realizar un cálculo.Formato correcto de DateTime para un servicio web
consigo el valor de m_txtDateAdd y enviar el XMLHttpRequest
<asp:textbox id=m_txtDateAdd tabIndex=4 runat="server" Width="96px" Text="<%# Today %>">
</asp:textbox>
que tiene un validador attacted a ella
<asp:CustomValidator id="m_DateAddValidator" runat="server" ErrorMessage="Please Enter a Valid Date" ControlToValidate="m_txtDateAdd">●</asp:CustomValidator>
Mi WebMethod ve algo como esto
[WebMethod]
public decimal GetTotalCost(DateTime transactionDate)
{
String sqlDateString = transactionDate.Year+"/"+transactionDate.Month+"/"+transactionDate.Day;
I use sqlDateString como parte del texto de comando que envío a la base de datos. Es una aplicación heredada y su sql en línea, así que no tengo libertad para configurar un procedimiento almacenado y crear y asignar parámetros en mi código. Esto funciona el 90% del tiempo. El servicio web se llama en el evento onchange de m_txtDateAdd. De vez en cuando la respuesta que recibo del servidor es
System.ArgumentException: No se puede convertir 25/06/2009 a System.DateTime. System.ArgumentException: No se puede convertir 25/06/2009 a System.DateTime.
Nombre del parámetro: tipo ---> System.FormatException: String no se reconoció como un DateTime válido.
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()
¿Puede mostrar el código del validador personalizado? El serializador intentará convertir su cadena utilizando el formato predeterminado, que solo puede comprender unos pocos formatos básicos. El validador debe garantizar que se envíe un formato conocido. –
Es un validador personalizado asp.net estándar. No he escrito el mío – user48408