Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
117 views
in Technique[技术] by (71.8m points)

javascript - Mapping Events to FullCalendar using JSON

Currently working on the jquery fullcalendar, I've been unable to add events to it from code behind.

I've tried all of these possible solutions but none of them worked for me:

This is my code

[WebMethod]

public static String TestOnWebService()
        {
            int i = 1;
           
            string myJsonString = "";
            List<object> myList = new List<object>();
            dt = db.getPublicHolidays();

            foreach (DataRow dr in dt.Rows)
            {
                        var id = i;
                        var title = dr["name"].ToString();
                        var start = dr["startDate"].ToString();
                        var end = dr["endDate"].ToString();


                        //Convert Implicity typed var to Date Time
                        DateTime RealStartDate = Convert.ToDateTime(start);
                        DateTime RealEndDate = Convert.ToDateTime(end);


                        //Convert Date Time to ISO
                        String SendStartDate = RealStartDate.ToString("s");
                        String SendEndDate = RealEndDate.ToString("s");


                        Events t_table = new Events(id, title, start, end);

                        myList.Add(t_table);
                        i++;
                    }

            myJsonString = (new JavaScriptSerializer()).Serialize(myList);
            return myJsonString;
            }
        }

and my events class

 public class Events
{
    public int id { get; set; }
    public String title { get; set; }
    public String start { get; set; }
    public String end { get; set; }

    public Events(int id2, String I, String t, String ds)
    {
        this.id = id2;
        this.title = I;
        this.start = t;
        this.end = ds;
    }
}

Here is the front end code

events: function (start, end, callback) {
          $.ajax({
              type: "POST",    //WebMethods will not allow GET
              url: '<%= ResolveUrl("EmpHolidays.aspx/TestOnWebService") %>',   //url of a webmethod - example below
              contentType: "application/json; charset=utf-8",
              dataType: "json",
              success: function (doc) {
                  var events = [];   //javascript event object created here
                  var obj = $.parseJSON(doc.d);  //.net returns json wrapped in "d"

                  for(var i=0;i<obj.length;i++){
                      console.log(obj[i]['id']);
                      console.log(obj[i]['title']);
                      console.log(obj[i]['start']);
                      console.log(obj[i]['end']);
                  }


                  $(obj.event).each(function () { //yours is obj.calevent                          
                      events.push({
                          title: $(this).attr('title'),  //your calevent object has identical parameters 'title', 'start', ect, so this will work
                          start: $(this).attr('start'), // will be parsed into DateTime object    
                          end: $(this).attr('end'),
                          id: $(this).attr('id')
                      });
                  });
                  callback(events);
              }
          });
      }

This is the result I get

enter image description here

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

SO AFTER THREE DAYS OF STRUGGLE, I GOT IT TO WORK! I added events from database to add to the jquery fullcalender. this is what solved my problem! Here is my code

My html and javascript code

    <!-- Main content -->
        <section class="content">
          <div class="row">
            <div class="col-md-3">
              <div class="box box-solid">
                <div class="box-header with-border">
                  <h4 class="box-title">Draggable Events</h4>
                </div>
                <div class="box-body">
                  <!-- the events -->
                  <div id="external-events">


                      <div runat="server" id="check">

                      </div>



                    <div class="checkbox">
                      <label for="drop-remove">
                        <input type="checkbox" id="drop-remove">
                        remove after drop
                      </label>
                    </div>
                  </div>
                </div>
                <!-- /.box-body -->
              </div>
              <!-- /. box -->
              <div class="box box-solid">
                <div class="box-header with-border">
                  <h3 class="box-title">Create Event</h3>
                </div>
                <div class="box-body">
                  <div class="btn-group" style="width: 100%; margin-bottom: 10px;">
                    <!--<button type="button" id="color-chooser-btn" class="btn btn-info btn-block dropdown-toggle" data-toggle="dropdown">Color <span class="caret"></span></button>-->
                    <ul class="fc-color-picker" id="color-chooser">
                      <li><a class="text-aqua" href="#"><i class="fa fa-square"></i></a></li>
                      <li><a class="text-blue" href="#"><i class="fa fa-square"></i></a></li>
                      <li><a class="text-light-blue" href="#"><i class="fa fa-square"></i></a></li>
                      <li><a class="text-teal" href="#"><i class="fa fa-square"></i></a></li>
                      <li><a class="text-yellow" href="#"><i class="fa fa-square"></i></a></li>
                      <li><a class="text-orange" href="#"><i class="fa fa-square"></i></a></li>
                      <li><a class="text-green" href="#"><i class="fa fa-square"></i></a></li>
                      <li><a class="text-lime" href="#"><i class="fa fa-square"></i></a></li>
                      <li><a class="text-red" href="#"><i class="fa fa-square"></i></a></li>
                      <li><a class="text-purple" href="#"><i class="fa fa-square"></i></a></li>
                      <li><a class="text-fuchsia" href="#"><i class="fa fa-square"></i></a></li>
                      <li><a class="text-muted" href="#"><i class="fa fa-square"></i></a></li>
                      <li><a class="text-navy" href="#"><i class="fa fa-square"></i></a></li>
                    </ul>
                  </div>
                  <!-- /btn-group -->
                  <div class="input-group">
                    <input id="new-event" type="text" class="form-control" placeholder="Event Title">

                    <div class="input-group-btn">
                      <button id="add-new-event" type="button" class="btn btn-primary btn-flat">Add</button>
                    </div>
                    <!-- /btn-group -->
                  </div>
                  <!-- /input-group -->
                </div>
              </div>

                <br />
                <button onclick="saveEvent();">Save</button>
            </div>
            <!-- /.col -->
            <div class="col-md-9">
              <div class="box box-primary">
                <div class="box-body no-padding">
                  <!-- THE CALENDAR -->
                  <div id="calendar"></div>
                </div>
                <!-- /.box-body -->
              </div>
              <!-- /. box -->
            </div>
            <!-- /.col -->
          </div>
          <!-- /.row -->
        </section>
        <!-- /.content -->

                 </ContentTemplate>

                 </asp:UpdatePanel>
            <!-- jQuery 2.2.0 -->

    <!-- Page specific script -->
    <script>
        var data2="";
        var startDateFinal="";
        var endDateFinal="";
        var eventNameFinal="";

      $(function () {

        /* initialize the external events
         -----------------------------------------------------------------*/
        function ini_events(ele) {
          ele.each(function () {

            // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/)
            // it doesn't need to have a start or end
              var eventObject = {
                  title: $.trim($(this).text())
              };



            // store the Event Object in the DOM element so we can get to it later
            $(this).data('eventObject', eventObject);

            // make the event draggable using jQuery UI
            $(this).draggable({
              zIndex: 1070,
              revert: true, // will cause the event to go back to its
              revertDuration: 0  //  original position after the drag
            });



          });
        }

        ini_events($('#external-events div.external-event'));

        /* initialize the calendar
         -----------------------------------------------------------------*/
        //Date for the calendar events (dummy data)
        var date = new Date();
        var d = date.getDate(),
            m = date.getMonth(),
            y = date.getFullYear();
        $('#calendar').fullCalendar({
          header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
          },
          <%--events: {
              $.ajax({
                  type: "POST",    
                  url: '<%= ResolveUrl("EmpHolidays.aspx/TestOnWebService") %>',
                  data: "{}",
                  contentType: "application/json; charset=utf-8",  
                  dataType: "json",
                  success: function (doc) {
                      alert("Success");
                      var events = [];
                      alert(doc.d);
                      var obj = $.parseJSON(doc.d);
                      for(var i=0;i<obj.length;i++){


                              title: 'All Day Event',
                              start: new Date(y, m, 1),
                              backgroundColor: "#f56954", //red
                              borderColor: "#f56954" //red


                            console.log(obj[i]['id']);
                             console.log(obj[i]['title']);
                              console.log(obj[i]['start']);
                              console.log(obj[i]['end']);
                      }


                      //$(obj.event).each(function () {                           
                      //    events.push({
                      //        id: $(this).attr('id'),
                      //        title: $(this).attr('title'),
                      //        start: $(this).attr('start'),
                      //        end: $(this).attr('end'),
                      //        backgroundColor: "#0073b7", 
                      //        borderColor: "#0073b7"            
                      //    });



                     // });                     
                      //callback(events);
                      callback && callback(events);
                  },
                  error: function(xhr, status, error) {
                      alert(xhr.responseText);
                  }
              });
               events: [
            {
              title: 'All Day Event',
              start: new Date(y, m, 1),
              backgroundColor: "#f56954", //red
              borderColor: "#f56954" //red
            },
            {
              title: 'Long Event',
              start: new Date(y, m, d - 5),
              end: new Date(y, m, d - 2),
              backgroundColor: "#f39c12", //yellow
              borderColor: "#f39c12" //yellow
            },
            {
              title: 'Meeting',
              start: new Date(y, m, d, 10, 30),
              allDay: false,
              backgroundColor: "#0073b7", //Blue
              borderColor: "#0073b7" //Blue
            },
            {
              title: 'Lunch',
              start: new Date(y, m, d, 12, 0),
              end: new Date(y, m, d, 14, 0),
              allDay: false,
              backgroundColor: "#00c0ef", //Info (aqua)
              borderColor: "#00c0ef" //Info (aqua)
            },
            {
              title: 'Birthday Party',
              start: new Date(y, m, d + 1, 19, 0),
              end: new Date(y, m, d + 1, 22, 30),
              allDay: false,
              backgroundColor: "#00a65a", //Success (green)
              borderColor: "#00a65a" //Success (green)
            },
            {
              title: 'Click for Google',
              start: new Date(y, m, 28),
              end: new Date(y, m, 29),
              url: 'http://google.com/',
              backgroundColor: "#3c8dbc", //Primary (light-blue)
              borderColor: "#3c8dbc" //Primary (light-blue)
            }
          ]


          $.ajax({
                  type: "GET",
                  url:  '<%= ResolveUrl("EmpHolidays.aspx/TestOnWebService") %>',
                  data: {
                      name: $(this).attr('name'),
                      startDate: $(this).attr('startDate'),
                      endDate: $(this).attr('endDate'),
                  },
                      success: function(events)
                      {
                          $('#calendar').fullCalendar('removeEvents');
                          $('#calendar').fullCalendar('addEventSource', events);         
                          $('#calendar').fullCalendar('rerenderEvents' );
                      }
                  });

          },--%>

          // events: function () {
          //    var data = getData();
          //   console.log(data);

          //   //var events = [];
          //   //       $.each(data, function (key, val) {
          //   //           events.push({
          //   //               title: val.title,
          //   //               start: val.start, 
          //   //               end: val.end
          //   //           });
          //   //       });  

          //          //callback(events); 

          //},



          buttonText: {
            today: 'today',
            month: 'month',
            week: 'week',
            day: 'day'
          },

          eventDrop: function (event, dayDelta, minuteDelta, allDay,

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...