【问题标题】:How to pass date value created by DatePicker to a mvc 5 controller with ajax如何将 DatePicker 创建的日期值传递给带有 ajax 的 mvc 5 控制器
【发布时间】:2016-01-26 12:25:20
【问题描述】:

我有一个活动会话页面。每个活动都有一个日期时间 (dd/mm/yyyy HH:mm:ss)。我正在尝试创建一个带有开始日期和结束日期的排序过滤器,以查看这些日期之间的所有活动。为此,我创建了两个带有 JqueryUI 日期选择器的文本框。我还在控制器中创建了方法,以及用于传递数据的 JS 脚本。

我的问题是将日期传递给控制器​​。它不起作用,当我尝试在控制器方法中使用它时,我有一个空值。我尝试在 DateFilter 中使用Datetime?,它正在获取值,但之后我无法使用AddDays

您能告诉我是否需要使用 `toISOString' 以及如何使用?

JS 脚本:

$("#btndatefilter").click(function () {
    var startdate = $('#datestart').val();
    var enddate = $('#dateend').val();
    $.ajax({
        url: "/AuditActivities/FilterByDate",
        type: "GET",
        data: { dateFilter: { StartDate: startdate, EndDate: enddate } },
    })
    .done(function (auditActivity) {
        $("#res").html(auditActivity);
    });
});

控制器

    [HttpGet]
    public ActionResult FilterByDate(DateFilter dateFilter)
    {
        DateTime endperiod = dateFilter.EndDate.AddDays(1).AddTicks(-1);

        string returnpartial = "";
        var auditActivity = db.AuditActivity.Include(a => a.Pc).Include(a => a.Activity).Include(a => a.Users);

        auditActivity = auditActivity.Where(a => a.Date > dateFilter.StartDate && a.Date < endperiod).OrderBy(a => a.Date);
        returnpartial = "Indexactivityuser";
        return PartialView(returnpartial, auditActivity.ToList());
    }

数据类

public class DateFilter
{
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
}

【问题讨论】:

    标签: asp.net-mvc date jquery-ui datetime get


    【解决方案1】:

    使用getDate 方法而不是val() 那么变量startdateenddate 是日期类型。然后 使用toISOString()。高温

    $(function() {
        $("#datestart").datepicker();
        $("#dateend").datepicker();
    
        $("#btndatefilter").click(function() {
            var startdate = $('#datestart').datepicker('getDate');
            var enddate = $('#dateend').datepicker('getDate');
            var dateFilter = 
            { StartDate: startdate.toISOString(), EndDate: enddate.toISOString() };
    
            $.ajax({
                url: "@Url.Action("FilterByDate", "AuditActivities")", 
                type: "GET",
                data: dateFilter
            })
            .done(function(auditActivity) {
                $("#res").html(auditActivity);
            });
        });
    });
    

    或者您可以将datepickerval() 传递给控制器​​并在那里解析字符串。为此,请指定datepicker 的格式。

    $("#datestart").datepicker({dateFormat:  "yy-mm-dd"});
    

    模型现在具有string 属性

    public class DateFilterModel
    {
        public string StartDate { get; set; }
        public string EndDate { get; set; }
    }
    

    并在控制器中按预期格式解析字符串

    // try { ...
    int[] startInfo = dateFilter.StartDate.Split('-').Select(s => int.Parse(s)).ToArray();
    DateTime start = new DateTime(startInfo[0], startInfo[1], startInfo[2]);
    

    对于yyyy-MM-dd,它也适用于我的ParseExact()

    string startInfo = dateFilter.StartDate;
    DateTime start= DateTime.ParseExact(
        startInfo, 
        "yyyy-MM-dd", 
        System.Globalization.CultureInfo.InvariantCulture);
    

    【讨论】:

    • 我很高兴它有帮助:)。我正在考虑其他可能性,请参阅编辑后的答案。
    • 再次感谢您,如果我必须处理不同的日期格式(如 dd/mm/yyyy 和 mm/dd/yyyy),这将非常有用。
    • toISOString() 正在使日期休息一天。
    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 2017-03-22
    • 1970-01-01
    • 2011-08-29
    相关资源
    最近更新 更多