2016-09-22 56 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 }) 

所以我能够与处理数据库外键,谢谢你