【问题标题】:Run a method in controller according to datepicker value根据 datepicker 值在控制器中运行方法
【发布时间】:2018-09-25 00:10:09
【问题描述】:

我想根据 datepicker 中选择的日期在 Home Controller 中运行 Index 方法, 这是我的查看代码:

<input type="text" name="date" class="datepicker" id="calendar" />
 $("#calendar").datepicker({
        dateFormat: 'dd-mm-yy',
        onSelect: function (date, instance) {
            $.ajax({
                type: "GET",
                url: '@Url.Action("Index","Home")/' + date,
                success: function (data) {
                    if (data.success) {
                        alert(date)
                    }
                }
            })
        }
    }).datepicker("setDate", new Date());

我想在我的日期选择器中选择一个日期时运行这个方法:

 [Route("Home/{date?}")]
        public ActionResult Index( DateTime? date = null)

问题是 Ajax 调用此 URL:Home\12-04-2018当我选择 12-04-2018 而不是 /Home/Index/12-04-2018 时是我的代码错误还是我遗漏了什么?感谢您的帮助。

【问题讨论】:

  • 在渲染视图时找到url: 行,看看它是如何渲染的。在浏览器中按 F12 进行检查。
  • 你定义了一个[Route("Home/{date?}")](意味着它不会包含动作名称)
  • 我评论了 [Route("Home/{date?}")] 它给出了相同的结果。

标签: javascript c# jquery asp.net-mvc asp.net-ajax


【解决方案1】:

如下更新您的代码,这应该适合您。日期已作为查询字符串传递

脚本

    $("#calendar").datepicker('setDate', 'today');

    $("#calendar")
        .datepicker({ dateFormat: 'dd/mm/yy' })
        .on("changeDate", function (e) {
            $.ajax({
                type: "GET",
                url: '@Url.Action("Index","Home") + '?date='+ e.date,
                success: function (data) {
                    if (data.success) {
                        alert(e.date)
                    }
                }
            });
    });

以及动作方法:

 [HttpGet]
 public ActionResult Index( DateTime? date = null)

更新:

要更改视图中的日期格式,请从 C# 可以解析的日期对象构建新的日期字符串

var newDate = e.date.getUTCMonth() + 1 + '/' + e.date.getUTCDate() + '/' + e.date.getUTCFullYear() + ' 00:00:00';

并将其作为参数传递给控制器​​。

【讨论】:

  • 我已经检查过它工作正常。我已经将动作参数用作字符串。你能用字符串参数检查吗?如果它有效,则可能存在日期解析问题。
  • 我在方法索引if (date == null) { ViewBag.dt = 1; }; 中添加了这个viewbag 我在我的视图中得到:1,表示该值没有从视图传递到控制器。
  • 这意味着在日期更改时调用的操作方法。但日期参数未解析为日期时间。您可以将您的操作参数更改为字符串并在操作方法中将其解析为日期吗?
  • 是的,我这样做了:[HttpGet] public ActionResult Index( string date ) {if (date == null) { ViewBag.dt = 1; }; //code} 我进入了我的视图:1。
  • 现在您可以在调用 ajax 之前从视图中更改所需格式的日期,这样您就可以使用 DateTime 作为操作参数,或者您可以保留操作参数字符串并将其解析为操作方法中的日期时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多