使用特定日期填充 jQuery Datepicker

Posted

技术标签:

【中文标题】使用特定日期填充 jQuery Datepicker【英文标题】:Populating jQuery Datepicker with specific dates 【发布时间】:2019-11-20 09:48:54 【问题描述】:

我正在尝试为用户创建一个 asp.net mvc 视图,以使用 jQuery UI Datepicker 仅从特定数量的可用日期中进行选择,如下图所示。

到目前为止,我已经使用控制器将 Datepicker 列表传递给视图,其中包括 jQuery 日历应向用户显示的所有日期。问题是,日历由于某种原因保持空白,即数据库中的日期没有显示在日历中。

我的日期选择器模型:

namespace BookingSys.Models

  public class Datepicker
  
    public DateTime Date  get; set; 
    public int Id  get; set; 
    public int LecturerId  get; set; 
    public string Comment  get; set; 
  

数据库上下文:

namespace BookingSys.Models

  public class BookingSysDb : DbContext
  
    public DbSet<Datepicker> Dates  get; set; 
  

我的预订控制器:

[HttpGet]
    public ActionResult Booking()
    
        var model = db.Dates.ToList();
        return View(model);
    

我的学校/预订视图:

@model List<BookingSys.Models.Datepicker>

@
ViewBag.Title = "Booking";


<h2>School Bookings</h2>

<form asp-controller="School" asp-action="Booking" method="post">
<input asp-for="School.Date" id="txtDate" /><br />
<button>Submit</button>
</form>

<link href="~/Content/themes/base/jquery-ui.min.css" rel="stylesheet" />

@section scripts 

<script src="~/Scripts/jquery-ui-1.12.1.min.js"></script>
<script>
            jQuery(function () 
                var enableDays = [' @(string.Join("','", Model.Select(d => 
               d.Date.ToString("dd-MM-yyyy")))) ']; // **** I think this line of code may be causing the problem

                function enableAllTheseDays(date) 
                    var sdate = $.datepicker.formatDate('dd-mm-yy', date)
                    console.log(sdate)
                    if ($.inArray(sdate, enableDays) != -1) 
                        return [true];
                    
                    return [false];
                

                $("#txtDate").datepicker(
                    dateFormat: "dd/MM/yy",
                    beforeShowDay: enableAllTheseDays

                );
            );
  </script>

  @Scripts.Render("~/bundles/jqueryval")


<style>
.my-class a 
    background-color: #07ea69 !important;
    background-image: none !important;
    color: #ffffff !important;

</style>

谁能告诉我为什么我的日历没有显示 Datepicker 数据库上下文中的日期?尽管 Datepicker 数据库包含 2019 年 7 月的 10 个日期,但它们并未显示在视图的日历中。

干杯

【问题讨论】:

考虑在创建后添加console.log(enableDays); 并检查输出。确保您在 html/javascript 中获得了您期望的数据。 我也将返回return [true, "", ""];return [false, "", ""];,如 API 中所述:api.jqueryui.com/datepicker/#option-beforeShowDay 索引 0 和 1 是必需的,2 是可选的。 @Twisty 感谢您的回复队友!我添加了 console.log 并返回了以下内容: Array(1) 0: " 10-10-1990','07-01-2019','07-31-2019 39;,'07-15-2019" 长度:1。你能看出为什么这行代码给出了这个输出吗?我的 JavaScript 知识不是最好的 【参考方案1】:

在此处尝试解决方案。

https://forum.jquery.com/topic/default-date-for-date-picker

看来您需要使用 setDate 命令。这可能会满足您的需求。

【讨论】:

感谢您的回复。虽然我认为你误解了我的问题。我从日历 UI 将日期输入字段没有问题,我遇到的问题是即使 Datepicker 数据库在 2019 年 7 月保存了 10 个日期,它们也没有显示在视图的日历中。【参考方案2】:

显然,它正在对其进行编码以防止代码注入,以防御 XSS。由于已知这只是 DateTime 值,因此可以使用 @Html.Raw 覆盖它

var enableDays = ['@Html.Raw(string.Join("','", Model.Select(d => 
d.DtmDate.ToString("MM-dd-yyyy")))'];

【讨论】:

【参考方案3】:

好的,试试这个解决方案:

https://forum.jquery.com/topic/jquery-datepicker-pick-multiple-dates

基于此,您要么需要第 3 方插件,要么必须“自行开发”。

【讨论】:

以上是关于使用特定日期填充 jQuery Datepicker的主要内容,如果未能解决你的问题,请参考以下文章

如何使用已选择的值设置 jQuery datepicker 的默认日期

Android攻城狮datePicke&timePicker

Jquery Bootstrap Datepicker 禁用过去日期并且不自动填充输入框

如何使用今天的日期预先填充 jQuery Datepicker 文本框?

jQuery UI Datepicker 将备用字段填充并格式化为 MySQL 日期

PHP:如何获取过去某个特定日期的上周日..?