2016-08-11 4 views
2

일부 MVC를 배우려고하므로 마스터/세부 정보 저장 양식이있는 웹 페이지를 만들었습니다. 내 문제는 다음과 같습니다 나는이 오류 메시지가 : 나는 세부 정보를 저장하기 위해 컨트롤러 액션에 foreach()를 추가 할 때MVC 마스터 세부 정보 저장 오류

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

. 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

dbticket을 추가 할 첫 번째 시도하고 foreach 루프를 실행합니다. 마지막으로 DbContextTicketDetails 앞에 해당 엔티티를 추가해야하므로 저장하려고합니다. 컨트롤러 코드는 다음과 같아야합니다

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 : 당신은 왜 db.SaveChangesAsync()처럼 async 방법을 사용하지 않는?

+1

스왑을 시도했지만 여전히 같은 오류가 발생했습니다 ... – m3dix

+0

작동 코드를 게시 할 수 있습니까? 어쩌면 먼저 티켓 객체를 저장 한 다음 db.TicketMasters.FirstOrDefault (x => x.Titel == T.Titel)를 사용하여 컨텍스트에서이 엔티티를 다시 가져 오십시오. 그런 다음 foreach 루프를 실행하고 SaveChanges()를 다시 시도하십시오. – mateudu

+0

여전히 같은 오류가 발생합니다. 세부 정보를 저장하지 않는 것만 제외하면 foreach 루프와 작동중인 항목을 삭제하십시오. – m3dix