将 Ajax 调用中的日期值传递给 MVC

Posted

技术标签:

【中文标题】将 Ajax 调用中的日期值传递给 MVC【英文标题】:Pass Date Values from Ajax Call to MVC 【发布时间】:2011-08-29 22:28:29 【问题描述】:

我的 Ajax 调用

 $('#QuickReserve').click(function () 
        var now = new Date();
        alert(now);

        var _data = 
            'ComputerName': _computerName,
            '_mStart': now.toTimeString(),
            '_mEnd': now.toDateString()
        ;
        $.ajax(
            cache: false,
//            contentType: "application/json; charset=utf-8",
            type: "POST",
            async: false,
            url: "/Home/SetMeeting",
            dataType: "json",
            data: _data,
            success: "",
            error: function (xhr) 
                alert("Error");
                alert(xhr.responseText);
            
        );
    );

我的 C# 代码

 public ActionResult SetMeeting(string ComputerName, DateTime? _mStart, DateTime? _mEnd)
        
           

代码结束时未收到日期时间值.....它们只是显示为空白。 当我尝试在 jquery 中

'_mStart': now.toTimeString(),
            '_mEnd': now.toDateString()

to datestring 确实返回今天的日期,但是,我也想要日期时间的时间部分。

【问题讨论】:

您应该尝试接受字符串而不是日期时间,然后再将字符串解析为日期。这个问题可能只是一个解析问题 【参考方案1】:

不要对数据格式做任何花招。只需使用标准函数date.toISOString(),它以 ISO8601 格式返回。

来自 javascript

$.post('/example/do',  date: date.toISOString() , function (result) 
    console.log(result);
);

来自 C#

[HttpPost]
public JsonResult Do(DateTime date)

     return Json(date.ToString());

【讨论】:

这是正确答案,标记的答案取决于服务器的系统日期格式。 不能使用这个你想从日期选择器接收日期。当我想从日期选择器接收日期时,还有其他选择吗?【参考方案2】:

将 json 日期转换为这种格式 "mm/dd/yyyy HH:MM:ss" 就是全部技巧 dateFormat 是 jsondate format.js 文件中的一个函数,位于 http://blog.stevenlevithan.com/archives/date-time-format

var _meetStartTime = dateFormat(now, "mm/dd/yyyy HH:MM:ss");

【讨论】:

【参考方案3】:

你能不能只传递一个 DateTime ,并将服务器上的 Date 部分与 time 部分分开?

你能不能只传递'_mDate':现在;

public ActionResult SetMeeting(string ComputerName, DateTime? _mDate)

   // Then in here use _mDate.Date, and _mDate.Time    

【讨论】:

只有日期部分发送成功,不是时间部分 你能不能只通过'_mDate':现在【参考方案4】:

为什么不将日期(和时间)从 Unix Epoch 转换成时间戳,然后用 js 显示日期?

c#

public double FromUnixEpoch(DateTime value)

    DateTime unixEpoch = new DateTime(1970, 1, 1);
    double timeStamp = (value - unixEpoch).Ticks / 1000;
    return timeStamp;

js

var myDate = new Date( object.myEpochDate *1000);
myDate.toUTCString().toLocaleString();

通过这种方法,您可以将纪元作为字符串传递到 json 中,然后像 js 中的日期一样处理它。

【讨论】:

我想将日期从 js 传递到 c#,而不是相反。 抱歉 Nikhil,误会你了。 JS 是否将日期时间转换为 unix 纪元,var myDate= new Date(); var unixEpoch = myDate.getTime();在 C# 中从 unix epoch 转换它: public DateTime fromUnixEpoch(long epoch) return (new DateTime(1970, 1, 1, 0, 0, 0)).AddSeconds(epoch); 我想出了一个简单的解决方案,我将 json 日期格式化为“mm/dd/yyyy HH:MM:ss”格式,它就像魔术一样工作。谢谢【参考方案5】:

这与格式有关。你绝对可以使用库或插件,我选择让它非常简单:

function getFormattedDate(date) 
  var curr_date = date.getDate();
  var curr_month = date.getMonth() + 1; //Months are zero based
  var curr_year = date.getFullYear();
  return curr_date + "-" + curr_month + "-" + curr_year;          

亲亲!

【讨论】:

以上是关于将 Ajax 调用中的日期值传递给 MVC的主要内容,如果未能解决你的问题,请参考以下文章

如何将复杂的键值参数表单视图传递给mvc中的控制器?

我没有从 ASP.NET MVC 中的控制器获取值

通过jQuery ajax调用将值列表传递给django视图

C# ASP.net MVC Ajax MySQL DATATABLES 列搜索无法将搜索值传递给控制器

如何将日期值传递给 plsql 中的游标?

将用户定义表中的日期值传递给 SQL Server 2008 存储过程