jquery .val(object) 没有分配正确的值 MVC 5

jquery .val(object) not assigning the correct value MVC 5

我正在一个网站上工作(网络开发新手),我遇到以下代码的问题(如果它是空白,则将结束日期设置为明天):

var date = new Date($('#txtStartDate').val());

var tomorrow = date.getDate() + 1;

$('#txtEndDate').val(tomorrow);

稍后在同一函数中

var myObj = {StartDate: $('#txtStartDate').val(), EndDate: $('#txtEndDate').val() };

我正在使用 MVC 5,当对象到达控制器时,开始日期已设置,但结束日期仍为 null(还使用 visual studio 2013 更新 1,因此调试中断,因为js 在 cshtml 文件中)。

通过搜索,代码应该可以工作,除非我有一个我没有看到的错误。

编辑:

在找到一种调试代码的方法后,我发现 $('#txtStartDate').val() 只返回 mm/dd/yyyy 而没有提供正确的日期。那是固定的。至于不检查结束日期是否为空,表单上有两种不同的条件,其中结束日期可能为空。对于一个,我需要将结束日期设置为从开始日期算起的第二天,对于另一个,空结束日期是完全有效的。

假设 var date = new Date($('#txtStartDate').val()); return 是一个有效日期,并假设它是今天(2014 年 1 月 29 日),那么

var tomorrow = date.getDate() + 1; // returns 30

将 return 30 不能绑定到 DateTime? 所以控制器中的值将是 null.

不清楚 IsChecked: $('#chkBox').prop('checked') 的意义是什么 - 它总是 return true 所以你也可以忽略它。

根据你的陈述"set the end date to tomorrow if it is blank"(你的代码甚至没有测试),你的代码应该是

var startDate = $('#txtStartDate').val();
var endDate = $('#txtEndDate').val();

if (!endDate) // test is the end date has been entered
{
  var tomorrow = new Date()); // returns Jan 29
  tomorrow.setDate(tomorrow.getDate() + 1); // returns Jan 30
  // assumes MM/dd/yyyy format
  $('#txtEndDate').val(tomorrow.getMonth() + 1 + '/' + tomorrow.getDate() + '/' + tomorrow.getFullYear());
  endDate = $('#txtEndDate').val();
}

var myObj = { StartDate: startDate, EndDate: endDate  };

$.ajax({
  url: '@Url.Action("MvcCall", "My")', // dont hard code urls!!
  type: 'POST',
  contentType: 'application/json; charset=utf-8',
  data: myObj,
  success: function (data) {
    ....
  }
});

请注意,如果 txtStartDatetxtEndDate 元素只是文本框,那么您需要额外检查以确保它们的值是有效日期

并学习调试客户端代码。按 F12 并在脚本上放置断点并检查值或添加 console.log(yourVar); 语句