单击日历时将数据加载到PartialView(ASP.NET MVC)

时间:2017-09-01 08:05:59

标签: jquery asp.net asp.net-mvc asp.net-mvc-4 fullcalendar

我使用的是fullcalendar插件

我可以点击日历中的日期并从中获取数据

这是脚本代码:

<script>             //Calendar initialization
$(document).ready(function () {
    $('#calendar').fullCalendar({
        header: {
            left: 'prev,next',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
        },
        defaultView: 'agendaWeek',
        events:"/Calendar/GetEvents/",
        firstDay: 1,
        selectable: true,
        select: function (start, end, jsEvent, view) {
            $('#right2').load('@Url.Action("SheduleNewAppointment", "Calendar")');
            var allDay = !start.hasTime() && !end.hasTime();
            $("#startAppointment").val(moment(start).format("MM/DD/YYYY HH:mm a"));

        },
        editable: true
    });
});

通过这段代码,我可以得到数据

select: function (start, end, jsEvent, view) {
                $('#right2').load('@Url.Action("SheduleNewAppointment", "Calendar")');
                var allDay = !start.hasTime() && !end.hasTime();
                $("#startAppointment").val(moment(start).format("MM/DD/YYYY HH:mm a"));

            },

我的问题是,我需要在select中打开部分视图,然后将数据添加到#startAppointment。它的输入

现在它打开局部视图,而不是向输入添加数据。 我怎么能这样做?

更新

如果我通过另一个按钮打开局部视图,然后在部分可见时单击日历,则一切正常

1 个答案:

答案 0 :(得分:2)

我同意Lazys的评论。您需要了解ajax操作(例如.load)以异步方式运行 ,并且紧接在异步操作调用下的行上编写的任何代码将立即执行 ,而无需等待异步操作完成。

因此,您的代码正在尝试访问startAppointment元素,并在该元素实际存在于页面之前设置其值。

如果你有一些代码要运行,这取决于从ajax调用返回的某些数据或标记,那么你必须等待ajax调用完成才能运行它。这是保证代码具有正确执行所需的值的唯一方法。这通常是通过一个回调函数来完成的,你可以给代码进行ajax调用,然后这个函数被存储起来,只有在ajax调用成功完成时才会执行。

对于jQuery的.load()方法,您可以提供一个回调函数作为load()方法本身的参数,如下所示:

$('#right2').load(
  '@Url.Action("SheduleNewAppointment", "Calendar")', 
  function () { //this is the callback function. It's not executed at the time you pass it load, but only after the loading operation (done via ajax) has finished
    var allDay = !start.hasTime() && !end.hasTime(); //I've included this line, although it appears to be redundant, since you never use the "allDay" variable afterwards.
    $("#startAppointment").val(moment(start).format("MM/DD/YYYY HH:mm a"));
  }
}); 

有关详细信息,请参阅http://api.jquery.com/load/

如果你这样做,它可以保证你的部分页面会在尝试访问该元素的jQuery代码之前加载,包括startAppointment元素,然后你应该没有问题。