MVC Master Detail 保存错误

MVC Master Detail Saving Error

我想学习一些 MVC,因此我创建了一个带有 master/detail 保存表单的网页。我的问题是: 我收到此错误消息:

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

首先尝试将 ticket 添加到您的 db,然后是 运行 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 } };            
} 

顺便说一句:你为​​什么不使用 async 方法,比如 db.SaveChangesAsync()

嗯,我刚刚解决了我的问题。因此,我删除并重新创建了 ADO.Net 实体数据模型。好像我把里面的东西搞砸了。

仍然非常感谢 mateudu 的帮助,非常感谢。