返回要使用 Ajax 下拉列表的日期时间列表
本文关键字:日期 时间 列表 下拉列表 Ajax 返回 | 更新日期: 2023-09-27 18:31:10
我有一个下拉列表,我需要用从 ajax 调用传递的日期时间值填充它。 填充的值如下所示:"/date1234847269/",而不是实际日期。我只需要将日期传递到下拉列表中。我不需要从控制器返回的日期时间值中的时间戳。
我不确定jQuery在处理c#日期时间值而不是字符串方面是否存在问题。 任何帮助将不胜感激。 谢谢
我的观点:
<select id="ddlDate" class="form-control bold">
<option value='0'>--Select Date--</option>
</select>
我的阿贾克斯电话:
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
};
}
更新 1/21/2016:
我现在将我的 json 数据"returnData"传递给下面的 javascript 函数,并根据另一个堆栈帖子对其进行转换: 如何格式化Microsoft JSON 日期?
function convertDate(returnData)
{
var date = new Date(returnData);
return date;
}
这现在给了我错误" date = Invalid Date {}, returnData = ["/Date(1451628000000)/"]
"。 我觉得我越来越近了。 任何帮助,不胜感激。
我用以下内容解决了这个问题:
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();
}
您看到的格式是旧的"Microsoft"格式日期方式。有两种方法可以绕过它。
一种方法是使用 JSON.Net 序列化器而不是内置的 JavaScriptSerializer
,因为它(自 4.5 版以来)格式化日期以便可以自动解析它们。
另一种(更快)的方法是简单地从当前格式的日期中提取数字,并将它们传递给新的 javascript Date
对象。
function toDate(value) {
return new Date(parseInt(/Date'(([^)]+)')/.exec(value)[1], 10));
}