2016-08-11 33 views
2

我試圖學習一些MVC,因此我創建了一個具有主/細節保存窗體的網頁。我的問題是: 我收到此錯誤信息:MVC主細節保存錯誤

SERVER ERROR - The server encountered an unexpected condition that prevented it from fulfilling the request. (XHR): POST 

當我在控制器操作添加foreach()保存詳細信息。 沒有foreach()其工作正常。

我正在使用數據庫的第一種方法。

這些都是我的表:

CREATE TABLE [dbo].[TicketMaster] (
[TicketID]   INT   IDENTITY (1, 1) NOT NULL, 
[Titel]    VARCHAR (50) NULL, 
PRIMARY KEY CLUSTERED ([TicketID] ASC) 
); 

CREATE TABLE [dbo].[TicketDetails] (
[TicketDetailsId] INT   IDENTITY (1, 1) NOT NULL, 
[TicketID]  INT   NOT NULL, 
[ItemName]  VARCHAR (50) NOT NULL, 
PRIMARY KEY CLUSTERED ([TicketDetailsId] ASC), 
CONSTRAINT [FK_TicketDetails_TicketMaster] FOREIGN KEY ([TicketID])REFERENCES [dbo].[TicketMaster] ([TicketID]) 
); 

我的視圖模型:

public class TLSModel 
{   
     public string Titel { get; set; } 
     public List<TicketDetail> TicketDetails { get; set; } 
} 

的Jquery:

$(document).ready(function() { 
    var list = []; 
    $('#add').click(function() { 
    list.push({ 
     ItemName: $('#ItemName).val().trim()   
    }); 
    $('#ItemName).val('').focus(); 
    GeneratedItemsTable(); 
}); 
$('#submit').click(function() { 
    var data = { 
     Titel: $('#Titel').val().trim(),    
     TicketDetails: list   
    } 
    $.ajax({ 
     url: '/Ticket/Create', 
     type: "POST", 
     data: JSON.stringify(data), 
     dataType: "JSON", 
     contentType: "application/json", 
     success: function (d) { 
      if (d.status == true) { 
       alert('Successfully done.'); 
       list = []; 
       $('#Titel').val(''); 
      } 
      else { 
       alert('Failed'); 
      } 
      $('#submit').val('Save'); 
     }, 
     error: function() { 
      alert('Error. Please try again.'); 
      $('#submit').val('Save'); 
     } 
    }); 
}); 
function GeneratedItemsTable() { 
...some Code... 
} 
}); 

控制器動作:

public JsonResult Create (TLSModel T) 
    { 
     bool status = true;    
     TicketMaster ticket = new TicketMaster { Titel = T.Titel }; 
     foreach(var i in T.TicketDetails) 
     { 
      ticket.TicketDetails.Add(i); 
     } 
     db.TicketMasters.Add(ticket); 
     db.SaveChanges(); 
     return new JsonResult { Data = new { status = status } };    
    }  

回答

0

嗯,我只是解決了我的問題。因此我刪除並重新創建了ADO.Net實體數據模型。似乎我在某種程度上把事情弄糟了。

非常感謝mateudu的幫助,非常感謝。

0

首先嚐試添加ticketdb,然後運行foreach循環。最後嘗試保存,因爲該實體應該在TicketDetails之前添加到您的DbContext。 控制器代碼應該是這樣的:

public JsonResult Create (TLSModel T) 
{ 
    bool status = true;    
    TicketMaster ticket = new TicketMaster { Titel = T.Titel }; 
    db.TicketMasters.Add(ticket); 
    foreach(var i in T.TicketDetails) 
    { 
     ticket.TicketDetails.Add(i); 
    }  
    db.SaveChanges(); 
    return new JsonResult { Data = new { status = status } };    
} 

BTW:你爲什麼不使用async方法,如db.SaveChangesAsync()

+1

我試過交換,仍然是相同的錯誤... – m3dix

+0

你能發佈工作代碼嗎?也許嘗試先保存票據對象,然後使用db.TicketMasters.FirstOrDefault(x => x.Titel == T.Titel)從您的上下文中獲取此實體。接下來,運行foreach循環並再次嘗試SaveChanges()。 – mateudu

+0

仍然收到相同的錯誤。 只需刪除foreach循環及其工作正常,但不保存詳細信息 – m3dix