Search code examples
javascriptasp.netvb.netpagemethods

Web method wont call, but does not error


Im struggling to get a web method to work in VB. The javascript gets called but never seems to call the web method. I am running in debug mode and get no errors.

Here is the code:

      <System.Web.Services.WebMethod()>
   Public Shared Sub PasteEvent(EventID As Integer, 
                                startDate As DateTime, 
                                endDate as DateTime, 
                                newStart As DateTime)

      ' work out the diff between start and end
      Dim difference As long = DateDiff(DateInterval.Minute,startDate,endDate)

      ' pasteStart  + minutes from the event start
      ' this is because we can only paste on the hour, but events may have started after the hour
      ' ie 10:15
      newStart.AddMinutes(startDate.Minute)

      ' new end = pastestart + diff
      Dim newEnd As DateTime = newStart.AddMinutes(convert.ToDouble(difference))

      ' call database 
      Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("Blueprint").ToString())


      Dim cmd As New SqlCommand
      cmd.CommandType = CommandType.StoredProcedure
      cmd.CommandText = "spOPSCopyEvent"

      cmd.Parameters.AddWithValue("@EventID", EventID)
      cmd.Parameters.AddWithValue("@StartDate", newStart)
      cmd.Parameters.AddWithValue("@EndDate", newEnd)

      cmd.Connection = conn

      conn.Open()

      cmd.ExecuteNonQuery()

      conn.Close()


   End sub

The javascript that calls it:

 <script type="text/javascript" language="javascript">

      function eventCopy(eventID, start, end)
      {
         alert("copy");
         // grab the event id and store it in a hidden text box
         $("#ctl00_MainContent_hidCopyEventID").val(eventID);
         $("#ctl00_MainContent_hidCopyStart").val(start);
         $("#ctl00_MainContent_hidCopyEnd").val(end);
      }

      function eventPaste(eventStart)
      {
         alert("paste");
         alert(eventStart);
         // Call a web method, passing the eventID and the new start time
         var eventID = $("#ctl00_MainContent_hidCopyEventID").val;
         var startDate = $("#ctl00_MainContent_hidCopyStart").val;
         var endDate = $("#ctl00_MainContent_hidCopyEnd").val;

         PageMethods.PasteEvent(eventID, startDate, endDate, eventstart)
      }

   </script>

So far I have :

Updated my script manager in the master page to have enablePageMethods="true"

Tried adding Imports System.Web.Services

Moved the javascript into the body rather than the head


Solution

  • The problem is that you are missing exception handling mechanism to see what error did you get .

    1. Put try and catch in javascript and vb code and print the error.

    2. Use the sniffer like Fidler to see what you are sending .

    3. Try to print trace messages in web services using Trace.Log and you can see them after running DebugView and see where you are falling