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 的帮助,非常感谢。
我想学习一些 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 的帮助,非常感谢。