返回使用Ajax下拉的日期时间列表

时间:2016-01-20 21:38:25

标签: c# jquery json ajax

我有一个下拉列表,我需要填写从ajax调用传递的日期时间值。填充的值如下所示:“/ date1234847269 /”而不是实际日期。我只需要将日期传递到下拉列表中。我不需要也是从控制器返回的日期时间值的时间戳。

我不确定jQuery是否存在处理c#datetime值而不是字符串的问题。任何帮助,将不胜感激。感谢

我的观点:

<select id="ddlDate" class="form-control bold">
    <option value='0'>--Select Date--</option>
</select>

我的Ajax电话:

function loadDateDDL(historicalIsChecked, monthlyIsChecked) {
    $.ajax({
        type: 'POST',
        url: '@Url.Action("GetGroupReportDates")',
        dataType: 'json',
        data: { isMonthly: monthlyIsChecked },
        success: function (returnData) {
            convertDate(returnData);
            $("#ddlDate").empty();
            $("#ddlDate").append("<option value='0'>--Select Date--</option>");
                            $.each(returnData, function (value, key) {
                                $("#ddlDate").append($("<option></option>")
                                                    .attr("value", value).text(key));
                            });
            //alert(returnData);
        },
        error: function (ex) {
            alert('Failed to retrieve dates.' + ex);
        }
    });
}

function convertDate(returnData) 
    {
        var date = new Date(returnData);
        return date;
    }

我的控制器:

public JsonResult GetGroupReportDates ( Boolean isMonthly )
{
    List<DateTime> reportDates = RealmsModel.RealmsAuditDataInterface ( ).GetGroupQueryRptDates ( isMonthly );

    return new JsonResult ( )
    {
        Data = reportDates,
        MaxJsonLength = Int32.MaxValue
    };
}

2016年1月21日更新:

我现在将我的json数据“returnData”传递给下面的javascript函数,并根据另一个堆栈帖子进行转换:How do I format a Microsoft JSON date?

function convertDate(returnData) 
    {
        var date = new Date(returnData);
        return date;
    }

这现在给我错误“date = Invalid Date {}, returnData = ["/Date(1451628000000)/"]”。我觉得我越来越近了。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

您看到的格式是旧的&#34; microsoft&#34;格式化日期的方式。有两种方法可以解决它。

一种方法是使用JSON.Net序列化程序而不是内置JavaScriptSerializer,因为它(自4.5版本)格式化日期,以便可以自动解析它们。

另一种(更快)的方法就是从日期中提取数字,将其传递给新的javascript Date对象。

function toDate(value) {
  return new Date(parseInt(/Date\(([^)]+)\)/.exec(value)[1], 10));
}

答案 1 :(得分:0)

我通过以下方式解决了这个问题:

function convertDate(returnData) 
{
    var pattern = /Date\(([^)]+)\)/;
    var results = pattern.exec(returnData);
    var dt = new Date(parseFloat(results[1]));
    return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();
}