2010-09-20 15 views
1

J'ai essayé de faire en sorte que cela fonctionne depuis des semaines maintenant, mais en vain. Je suis sûr que mon code doit échouer à travers quelque chose d'assez petit et stupide, mais après avoir essayé un certain nombre d'approches différentes, je commence à avoir vraiment du mal à savoir quel pourrait être le problème. Quelqu'un d'autre a-t-il réussi à faire fonctionner le calendrier jQuery Week (http://github.com/themouette/jquery-week-calendar) avec un HTTPHandler retournant le JSON?Utilisation de HTTPHandler en C# .NET 3.5 avec le calendrier de la semaine jQuery

J'ai essayé:

  1. coder en dur l'JSON pour sortir du gestionnaire comme une chaîne (par exemple des « événements: [{etc}] »)
  2. Essayer avec ou sans l'initiale "événements:"
  3. LINQ pour récupérer des données, sérialisation puis avec JavaScriptSerializer
  4. en utilisant à la place DataContractJsonSerializer
  5. Création d'une méthode toJSON au-dessus
  6. aide .getJson $ pour récupérer les données
  7. En utilisant $ .get à la place
  8. En utilisant .ajax $, avec "async = false"
  9. Mettre l'appel de données dans une fonction, puis en appelant la fonction par:
 
    data: function(start, end, callback) { 
     callback(getData()); 
    } 

Aucune d'entre elles ne semble fonctionner. J'ai même essayé de courir l'appel de données avant le code de calendrier à l'aide .get $, getJSON $ et .ajax $, comme:

 
    $.getJSON('/content/handlers/GetScheduledAppointments.ashx', function(json) { 
     $calendar.weekCalendar({ 
      . 
      . 
      . 
      data: json 
     }); 
    }); 

Je l'ai essayé tant de façons différentes que je ne peux pas vraiment poster tous les exemple de code qui échoue, mais si quelqu'un peut m'aider, je serai plus qu'heureux de poster quelques exemples si nécessaire.

Est-ce que quelqu'un a réussi à faire fonctionner ces deux choses ...?

Répondre

3

Pour quelqu'un d'autre ayant les mêmes problèmes que moi, j'ai un certain nombre de pointeurs qui peuvent vous aider. Ce sont seulement des choses que j'ai trouvées qui m'ont aidé et qui ne sont que des conseils pour quelqu'un d'autre qui a gaspillé des semaines de temps précieux à se demander pourquoi un code apparemment correct ne fonctionne pas. Je suis bien conscient que mes compétences sont faibles (vieil homme), mais si cela aide à sauver une personne, alors mon temps n'a pas été complètement perdu.

Ceci est pour les formulaires Web C# .NET 3.5, pas MVC.

Tout d'abord, assurez-vous que les propriétés ContentType et ContentEncoding de l'objet Response sont définies sur JSON. Dans le passé, je l'ai utilisé « text/plain », mais cela ne semble pas fonctionner pour moi à cette occasion:

context.Response.ContentType = "application/json"; 
context.Response.ContentEncoding = Encoding.UTF8; 

Si vous utilisez LINQ, la création d'un nouvel objet dans l'ordre et mettre en forme le calendrier attend aidera à minimiser les problèmes d'irrégularités de données. Si vous avez besoin de rendez-vous en lecture seule, vous pouvez simplement ajouter l'option à la liste. L'élément « titre » ci-dessous fonctionne comme un ISNULL ou COALESCE serait dans SQL, pour éviter nulls retour:

var apps = (
    from a in db.Appointments 
    select new { 
     id = a.id, 
     start = a.startTime.Value, 
     end = a.endTime.Value, 
     title = a.subjectLine == null ? "" : a.subjectLine 
    }).ToList(); 

Bien qu'il existe de nombreuses façons de sérialisation l'ensemble de données en JSON, j'ai trouvé la méthode la plus propre est d'utiliser la bibliothèque NewtonSoft Json.NET.Ceci est aussi simple que l'ajout d'une ligne pour créer un objet JSON, avec la mise en forme de date ISO8601 nécessaire:

return JsonConvert.SerializeObject(apps, new IsoDateTimeConverter()); 

En ce qui concerne le côté jQuery va je ne montre que les « données » fonction, comme cela est la partie qui me avait déconcerté la plus longue:

data: function(start, end, callback) { 
    $.ajax({ 
     url:  "/content/handlers/GetScheduledAppointments.ashx", 
     type:  "GET", 
     success: function(json) { 
      callback(json); 
     }, 
     async:  false 
    }); 
} 

une astuce pratique concernant les dates, que je suis venu avant de commencer à utiliser la bibliothèque Json.NET - si vous ne pouvez pas obtenir .NET pour retourner les dates dans un format que jWC aime, alors utilisez la bibliothèque [Date.js pour effectuer une mise en forme supplémentaire dans le jQuery lui-même. Pendant des jours je n'ai pas pu obtenir mon back-end pour produire les heures de début et de fin dans un format qui serait rendu sur le calendrier, peu importe ce que j'ai essayé. Dans tous les exemples de fonctionnement (avec des données locales générées dans le jQuery) les dates ont été créées en utilisant le format suivant:

new Date(year, month, day, hour, minute) 

Ainsi, en utilisant cette base, il est également possible de lancer explicitement les dates de retour de l'arrière fin de compte, comme la bibliothèque Date.js prendra presque tout approche d'une date et sa magie:

data: function(start, end, callback) { 
    $.ajax({ 
     url:  "/content/handlers/GetScheduledAppointments.ashx", 
     type:  "GET", 
     success: function(json) { 
      if ($.isArray(json)) { 
       $.each(json, function(key, value) { 
        value.start = new Date(value.start); 
        value.end = new Date(value.end); 
       }); 
      } 
      callback(json); 
     }, 
     async:  false 
    }); 
} 

Je sais que rien de tout cela est très leet (ou même optimisé), mais nous espérons que cela peut être utile à certains les gens qui ont de la difficulté avec jWC et .NET.

+0

tx beaucoup .. Je me heurtais à des problèmes d'intégration jWC avec asp.net MVC .. ce poste m'a aidé – Premkumar

+0

Très bon homme, je luttais avec elle à partir de 2 jours, j'ai encore besoin d'aide, seriez-vous en mesure de vous partagez "json" réponse? Je veux juste vérifier le format DateTime envoyé par le serveur, j'utilise l'API Web. –

+0

Je pourrais si je l'avais encore! Malheureusement, je ne travaille plus dans le post où ce code était, donc je suis vraiment désolé. J'espère que vous réussirez à le faire trier! – mafbailey