MVC主细节保存错误

时间:2016-08-11 11:15:56

标签: jquery ajax asp.net-mvc master-detail

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

<% I18n.available_locales.map.with_index(1) do |locale, index| %>
   <%= f.text_field :title_(I want to use the locale here) %>
<% end %>

当我在控制器操作中添加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)
);

我的ViewModel:

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])
);

Jquery的:

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

控制器操作:

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

2 个答案:

答案 0 :(得分:0)

首先尝试将ticket添加到db,然后运行foreach循环。最后尝试保存,因为该实体应该在DbContext之前添加到TicketDetails。 您的控制器代码应如下所示:

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 :(得分:0)

我刚解决了我的问题。因此,我删除并重新创建了ADO.Net实体数据模型。似乎我在那里搞砸了事情。

还有很多感谢mateudu的帮助,非常感谢。