【问题标题】:dynamically update dates in date picker in Jquery AJAX call在 Jquery AJAX 调用中动态更新日期选择器中的日期
【发布时间】:2019-10-09 14:01:21
【问题描述】:

我有位置文本框自动完成文本框和可用日期文本框。

当用户键入位置时,我的自动完成文本框有一个 AJAX 调用来获取匹配记录。在自动完成的 onSelect 调用中,我将获得 Id,并且我必须调用 MVC 控件的操作来获取基于该 Id 的日期。在 AvailableDates 文本框中应该附加一个日期选择器,它应该禁用所有发送我的控件操作的日期。

我怎样才能做到这一点,任何帮助将不胜感激!

谢谢。

我尝试了以下代码,但它没有禁用日期。

var Locations = [
   { value: 'Andorra', id: 'AD' },
   // ...
   { value: 'Zimbabwe', id: 'ZZ' }
];

$('#autocomplete').autocomplete({
    lookup: Locations,
    onSelect: function (suggestion) {
        alert('You selected: ' + suggestion.value + ', ' + suggestion.id);
$.ajax({
        url: '@Url.Action("getAvailableDates","booking")',
        dataType: "json",
        type: "GET",            
        cache: false,
        data: {id:suggestion.id} ,
        success: function (holidays) { 
            if (data.success) {
                alert(data.message);
                  $('#txtAvailableDates').datepicker({
                   beforeShowDay: function(date){

                  }
              });
            }
        },
        error: function (xhr) {
            alert(xhr.responseText);
        }
    });
    }
});

MVC 控制器操作返回列表假日日期

日期文本框应填充日期,禁用假日日期。

【问题讨论】:

  • 控制器返回什么?你能发布数据中的内容吗?
  • public ActionResult getAvailableDates(string id) { var itemList = (from items in xxx where yyy select new { holiday = ppp }).ToList();返回 Json(itemList, JsonRequestBehavior.AllowGet); }
  • 所以你能在数据中显示 json。在您的成功方法中放置一个 console.log(data) 并将 json 作为您问题的一部分发布。

标签: c# jquery model-view-controller datepicker


【解决方案1】:

这是我如何让它工作的。 我不完全确定您的控制器返回什么,但我的返回日期数组。 你的显然是在使用 id,但对于我的例子,我只是返回一个日期数组。

[Route("api/[controller]")]
[Produces("application/json")]
[ApiController]
public class BookingController : ControllerBase
{
    [HttpGet("{id}")]
    public IActionResult Get(string id)
    {
        DateTime[] holidays = new DateTime[]
            { 
                new DateTime(2019, 10, 14),
                new DateTime(2019, 11, 11),
                new DateTime(2019, 11, 28),
            };
        return Ok(holidays);
    }
    }        
}

然后在成功的 ajax 调用中,我使用 map 来获取与 datepicker 字符串匹配的日期。并使用 beforeShowDay 来禁用假期

 $.ajax({
        url: 'api/Booking/AP',
        dataType: "json",
        type: "GET",            
        cache: false,
            success: function (data) { 
               var dates = data.map(x => new Date(x).toISOString().split('T')[0]);
                console.log(dates);
                $("#datepicker").datepicker({
                     beforeShowDay: function(date){
                        var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
                        console.log(string);
                         return [ dates.indexOf(string) == -1 ]
                    }
                })
            },
        error: function (xhr) {
            alert(xhr.responseText);
        }
        });

【讨论】:

  • 感谢@Bryan。如何将 List 转换为只有日期?
  • 我试过 list.select(x=>x.ToString("MM/dd/yyyy")).Tolist() 但这会随着时间的推移不断返回日期。
  • 这就是 map 函数在 javascript 中的作用。 data 是一个日期时间数组(序列化为 javascript),ajax 调用中的 map 函数将其转换为日期。
  • 对我来说这不是 API 控制器,而是它的 MVC 应用程序。我怎样才能返回数组? AJAX get调用后,执行控制器的Get方法,直接进入AJAX调用的error函数。
  • 他们都返回 json 应该无关紧要。但我注意到在你的 ajax 调用中你调用结果为假期,然后引用不存在的数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
相关资源
最近更新 更多