2015-09-22 24 views
0

Я пытаюсь создать новую строку в таблице, которую я разместил в базе данных Azure SQL. Мой передний конец - AngularJS с C# в .NET в качестве задней части. Вот мой код от переднего конца передачи объекта:Передача объекта 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; 
       }); 

А вот мой бэкенд код, который получает данные и пытается добавить в базу данных:

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

В 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(); 
} 

А вот мой класс билетов:

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; } 

} 

Я думаю, что проблема связана с Post(), ожидающим объект билета. Я попытался найти, как получить данные JSON, и использовать это для Ticket, но с большой удачей.
Моя проблема в том, что я не могу создать новую строку. Изменения не отражаются в моей базе данных.

+1

Вы не скажете, в чем проблема? Что вы на самом деле видите, это не то, что вы хотите? –

+2

Что такое ** newTicket ** объект выглядит как на стороне клиента и ** Класс Ticket выглядит как на стороне сервера? Вы видите ошибку скрипта в браузере? – Win

+0

Вы использовали отладчик, чтобы узнать, какое значение t есть, когда оно вызвано? Это вообще называется? Если да, то это нулевой или заполненный какой-то ценностью? Убедитесь, что свойства класса Ticket соответствуют json-полям в New Ticket – JNYRanger

ответ

0

Вам не нужно JSON.stringify ваш объект при проводке данных с $http в AngularJS, просто передать сам объект в качестве второго параметра, например:

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

Во-первых нет необходимости вызывать JSON. stringify() для объекта newticket javascript для второго параметра метода $ http.post().

Затем в веб-методе api напишите параметр типа JObject с именем newTicket, чтобы получить отправленный объект, и используйте универсальную версию метода ToObject для преобразования размещенных данных в желаемый тип. Не забудьте использовать атрибут [FromBody] для параметра метода. код для webapi выглядит так:

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