【问题标题】:ExceptionType: "System.FormatException" Message: "30/6/2019 is not a valid value for DateTime."ExceptionType:“System.FormatException”消息:“30/6/2019 不是 DateTime 的有效值。”
【发布时间】:2019-11-04 00:19:13
【问题描述】:

我有两个 Ajax 请求。第一个从日期选择器获取日期并检查数据库日期。这工作正常。

第二个请求从日期选择器获取日期并检索该月的第一个日期和该月的最后一个日期。这会导致错误。

这里是 WebMethod:

[System.Web.Services.WebMethod]
public static string GetDateFromDB(DateTime compareDate)
{            
  string selectedDate = compareDate.ToString("yyyy/MM/dd");                           
  SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginDBConnectionString1"].ConnectionString);

  // testing purpose
  SqlCommand com = new SqlCommand("SELECT * from Holiday where Date='" + selectedDate + "'", conn);           
  SqlDataAdapter sqlDa = new SqlDataAdapter(com);       
  DataTable dt = new DataTable();
  sqlDa.Fill(dt);

  if (dt == null || dt.Rows.Count == 0)
    return "NG";
  else
    return "OK";
}

[System.Web.Services.WebMethod]
public static string GetFirstDateAndLastDate(DateTime firstDayDate, DateTime lastDayDate, string ddlName)
{
  string firstDay = firstDayDate.ToString("yyyy/MM/dd");
  string lastDay = lastDayDate.ToString("yyyy/MM/dd");

  SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginDBConnectionString1"].ConnectionString);

  // testing purpose
  SqlCommand com = new SqlCommand("SELECT sum([NumberOfHours]) FROM [LoginDB1].[dbo].[tbOT] where [Date] between Date =  + '" + firstDay + "' And Date =  + '" + lastDay + "' AND name =  + '" + ddlName + "'", conn);
  SqlDataAdapter sqlDa = new SqlDataAdapter(com);
  DataTable dt = new DataTable();
  sqlDa.Fill(dt);     

  return "NA";            
}

脚本就在下面:

jQuery(function($) {
  $("[id$=datepicker]").datepicker({
    onSelect: function(dateText) {
      $(this).change();
      $.ajax({
        type: "POST",
        url: "SupervisorOTRequest.aspx/GetDateFromDB",
        data: '{ "compareDate" : "' + dateText + '"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
          if (response.d == "OK") {
            alert("Today is Public Holiday!!!");
            $("[id$=txtOTRate]").val(1);
          } else if (response.d == "NG") {
            var date1 = $("[id$=datepicker]").datepicker('getDate');
            var day = date1.getDay();
            if (day == 1 || day == 2 || day == 3 || day == 4 || day == 5 || day == 6) {
              $("[id$=txtOTRate]").val(1.5);
            } else {
              $("[id$=txtOTRate]").val(2);
            }
          }
        }
      });

      var selectedDate = $("[id$=datepicker]").datepicker('getDate');
      //  var selectedDate = gg.getDate();
      //var selectedDate = $("[id$=datepicker]").val();
      var firstDay = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1);
      var lastDay = new Date(selectedDate.getFullYear(), selectedDate.getMonth() + 1, 0);

      var firstDayWithSlashes = (firstDay.getDate()) + '/' + (firstDay.getMonth() + 1) + '/' + firstDay.getFullYear();
      var lastDayWithSlashes = (lastDay.getDate()) + '/' + (lastDay.getMonth() + 1) + '/' + lastDay.getFullYear();

      var data = {};
      data.fristDayDate = firstDayWithSlashes;
      data.lastDayDate = lastDayWithSlashes;
      data.ddlName = $("[id$=ddlName] option:selected").text();

      $.ajax({
        type: "POST",
        url: "SupervisorOTRequest.aspx/GetFirstDateAndLastDate",
        // data: '{ "fristDayDate" : "' + firstDayWithSlashes + '" + "lastDayDate" : "' + lastDayWithSlashes + '"}',
        data: JSON.stringify(data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
          if (response.d == "NA") {
            $("[id$=txtRemainHour]").val();
          }
        }
      });
    },
  }).on("change", function() {});

  function display(msg) {
    $("<p>").html(msg).appendTo(document.body);
  }
});

当检查 Network > Headers > Request Payload 下的页面时,它会正确显示(如下):

{fristDayDate: "1/6/2019", lastDayDate: "30/6/2019", ddlName: "Masrudin Bin A B Rahman"}
ddlName:“马斯鲁丁·宾·A·B·拉赫曼”
第一天日期:“2019 年 1 月 6 日”
lastDayDate:“2019 年 6 月 30 日”

但是在预览下,错误信息显示如下:

{消息:“30/6/2019 不是 DateTime 的有效值。”,…}
异常类型:“System.FormatException”
消息:“30/6/2019 不是 DateTime 的有效值。”
堆栈跟踪:“
在 System.ComponentModel.DateTimeConverter.ConvertFrom(ITypeDescriptorContext 上下文,CultureInfo 文化,对象值)
在 System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer 序列化器, Boolean throwOnError, Object&convertedObject)

在响应下,错误消息如下所示:

{"Message":"30/6/2019 不是 DateTime 的有效值。","StackTrace":"
在 System.ComponentModel.DateTimeConverter.ConvertFrom(ITypeDescriptorContext 上下文,CultureInfo 文化,对象值)
在 System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(对象 o,类型类型,JavaScriptSerializer 序列化程序,布尔 throwOnError,Object\u0026 转换对象)

【问题讨论】:

  • 你的数据库在线吗?
  • 请查看minimal reproducible example 指导和edit 帖子以提供必要的信息。请注意,在代码中显示 SQL 注入漏洞示例并没有改善对 SO 问题的接收。
  • @Licentia 当错误出现在参数解析时(作为默认 ASP.Net 模型投标的一部分),“数据库是否在线”有什么区别?
  • 你的问题的问题只是它过于复杂。你有这个字符串“30/06/2019”,只向我们展示正在进行转换并且失败的代码..希望有所帮助
  • "1/6/2019" 需要 d/M/yyyy 格式字符串或月份和日期的前导零以匹配您的格式

标签: c# jquery asp.net ajax webmethod


【解决方案1】:

卡里奥普,

试试这个

DateTime firstDay= DateTime.ParseExact(firstDayDate, "yyyy/MM/dd", new CultureInfo("en-US"));  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    相关资源
    最近更新 更多