2016-09-22 72 views
0

我正在做一個創建幫助臺系統的練習。我首先使用代碼,因此我創建了一些我將簡要描述的腳本。通過帖子形式傳遞外鍵

這個類是我的主類

public class Ticket 
{ 
    public int Id { get; set; } 
    [Required] 
    [StringLength(255)] 
    public string Name { get; set; } 
    [Required] 
    [Display(Name = "Descrição")] 
    public string Description { get; set; } 
    public TicketStatus TicketStatus { get; set; } 
    public byte TicketStatusId { get; set; } 
} 

,我創建了這個類的FK辦理車票回答票

public class TicketAnswer 
{ 
    public int Id { get; set; } 
    public Ticket Ticket { get; set; } 
    public int TicketId { get; set; } 
    public string Message { get; set; } 
} 

要創建自己的狀態,我創建一個視圖模型來處理所有機票答案

public class AnswerTicketViewModel 
{ 
    //public IEnumerable<TicketStatus> TicketStatus { get; set; } 
    public Ticket Ticket { get; set; } 
    public List<TicketAnswer> TicketAnswer { get; set; } 
    public string Message { get; set; } 
} 

並通過此表格

@using (Html.BeginForm("SaveAnswer", "Ticket")) 
{ 
    @Html.AntiForgeryToken() 

    @Html.HiddenFor(model => model.Ticket.Id) 
    <div class="form-group"> 
     @Html.LabelFor(model => model.Message, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.TextAreaFor(model => model.Message, 10, 50, new { htmlAttributes = new { @readonly = "readonly", disabled = "disabled", @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.Message, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Enviar Resposta" class="btn btn-default" /> 
     </div> 
    </div> 

} 

這是動作

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult SaveAnswer(TicketAnswer ticket) 
    { 
     if (!ModelState.IsValid) 
     { 
      var ticketStatus = _context.TicketStatus.ToList(); 
      var ticketAnswer = _context.TicketAnswer.Where(t => t.TicketId == ticket.Ticket.Id).ToList(); 

      var viewModel = new AnswerTicketViewModel 
      { 
       Ticket = ticket.Ticket, 
       TicketAnswer = ticketAnswer 
      }; 
      return View("AnswerTicketForm", viewModel); 
     } 

     _context.TicketAnswer.Add(ticket); 
     _context.SaveChanges(); 

     return RedirectToAction("Index", "Ticket"); 
    } 

我如何改變這種狀況,並處理這個FK我得到一個錯誤「INSERT語句衝突與外鍵約束‘FK_dbo_TicketAnswers_dbo_Tickets_TicketId’?我嘗試各種解決方案可以有人給小費?

+0

你的表單發回的唯一值是'Ticket.Id'。唯一的其他表單控件是'Message',但不會發佈一個值,因爲它的dsabled。您的視圖中的模型是'AnswerTicketViewModel',但是您的POST方法中的模型是'TicketAnswer'並且'TicketAnswer'沒有名爲'TicketId'的屬性,因此不會綁定任何內容。 –

+1

你的代碼沒有什麼意義。爲了編輯的視圖模型不應該包含數據模型(只包括一個propery的'int TicketId',而不是'Ticket'),爲什麼當你從不使用它時,它有一個屬性'List '? –

+0

我使用時,但不是當我保存表格時,我用它來製作所有答案的視圖 – Alraune

回答

0

明白了男人在我的視圖模型我把我的表上設置到車票的標識一個變量,並堅持在崗位方法

public class AnswerTicketViewModel 
{ 
    //public IEnumerable<TicketStatus> TicketStatus { get; set; } 
    public Ticket Ticket { get; set; } 
    public int TicketId { get; set; } 
    public List<TicketAnswer> OtherAnswers { get; set; } 
    public TicketAnswer TicketAnswer { get; set; } 
} 

@Html.HiddenFor(model => model.TicketId, new { Value=Model.Ticket.Id }) 

所以我能夠與處理數據庫外鍵,謝謝你