2015-09-22 1 views
0

J'essaie de créer une nouvelle ligne dans une table que j'ai hébergée dans Azure SQL Database. Mon frontal est AngularJS avec C# dans .NET comme l'extrémité arrière. Voici mon code de l'extrémité avant le passage de l'objet:Passer l'objet JavaScript à C#

var insertTicket = function (newTicket) { 
    return $http.post("http://localhost:50412/api/tickets", JSON.stringify(newTicket)) 
       .then(function (response) { 
        console.log(response); 
        console.log("Insert Successful"); 
        return; 
       }); 

Et voici mon code back-end qui reçoit les données et tente d'ajouter à la base de données:

[Route("api/tickets")] 
public HttpResponseMessage Post(Ticket t) 
{ 
    TicketsRepository.InsertTicket(t); 
    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK); 
    return response; 
} 

En TicketRepisitory:

public static void InsertTicket(Ticket tick) 
{ 
    var maxID = (from ticket in dataContext.Tickets 
       select ticket.id).Max(); 
    var tick = new Ticket(); 
    tick.id = maxID + 1; 

    dataContext.Tickets.Add(tick); 
    dataContext.SaveChanges(); 
} 

Et voici ma classe de billets:

public partial class Ticket 
{ 
    //Properties 
    public int id { get; set; } 
    public string title { get; set; } 
    public string customer { get; set; } 
    public string barcode { get; set; } 
    public string assignedTo { get; set; } 
    public string category { get; set; } 
    public string importance { get; set; } 
    public Nullable<System.DateTime> openDate { get; set; } 
    public Nullable<System.DateTime> dueDate { get; set; } 
    public Nullable<System.DateTime> closedDate { get; set; } 
    public string comments { get; set; } 
    public string condition { get; set; } 
    public Nullable<int> workHours { get; set; } 

    //Relationships 

    public Employee Employee { get; set; } 
    public Employee Employee1 { get; set; } 
    public Equipment Equipment { get; set; } 

} 

Je pense que le problème est avec Post() attend un objet ticket. J'ai essayé de chercher comment recevoir des données JSON et l'utiliser pour Ticket, mais sans beaucoup de chance.
Mon problème est que je ne peux pas créer une nouvelle ligne. Aucun changement n'est reflété dans ma base de données.

+1

Vous ne dites pas quel est votre véritable problème? Que voyez-vous réellement ce n'est pas ce que vous voulez? –

+2

À quoi ressemblent les objets ** newTicket ** du côté client et la classe ** Ticket ** du côté serveur? Voyez-vous une erreur de script dans le navigateur? – Win

+0

Avez-vous utilisé un débogueur pour voir quelle valeur t est quand il est appelé? Est-ce qu'on l'appelle du tout? Si oui, est-il nul ou rempli d'une sorte de valeur? Assurez-vous que les propriétés de la classe Ticket correspondent aux champs json dans New Ticket. – JNYRanger

Répondre

0

Vous n'êtes pas obligé de JSON.stringify votre objet lors de la publication des données avec $http dans AngularJS, il suffit de passer l'objet lui-même comme second paramètre, comme ceci:

var insertTicket = function (newTicket) { 
return $http.post("http://localhost:50412/api/tickets", newTicket) 
      .then(function (response) { 
       console.log(response); 
       console.log("Insert Successful"); 
       return; 
      }); 
0

Tout d'abord il n'y a pas besoin d'appeler JSON. Méthode stringify() sur l'objet newticket javascript pour le second paramètre de la méthode $ http.post().

Ensuite, dans la méthode web api, écrivez un paramètre de type JObject portant le nom newTicket pour recevoir l'objet affiché, et utilisez la version générique de la méthode ToObject pour convertir les données publiées en type souhaité. N'oubliez pas d'utiliser l'attribut [FromBody] pour le paramètre method. le code pour webapi ressemble à ceci:

[Route("api/tickets")] 
public HttpResponseMessage Post([FromBody]JObject newTicket) 
{ 
    var t = newTicket.ToObject<Ticket>(); 
    TicketsRepository.InsertTicket(t); 
    HttpResponseMessage = Request.CreateResponse(HttpStatusCode.OK); 
    return response; 
}