2016-08-11 23 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