2016-09-22 12 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; } 
} 

であると私はすべて処理するためのviewmodelを作成し、私のフォームを作成するには、チケット

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

にFKでチケット答えを処理するために、このクラスを作成しましたチケットの回答

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を処理する方法を、私はエラーFK_dbo_TicketAnswers_dbo_Tickets_TicketId 『「FOREIGN KEY制約と競合INSERT文』を取得していますか?私は誰かがチップを与えることができるすべての種類のソリューションを試してみませんか?

+0

フォームが返す唯一の値は 'Ticket.Id'です。唯一の他のフォームコントロールは 'Message'ですが、dsabledのため値をポストしません。あなたのビューのモデルは 'AnswerTicketViewModel'ですが、あなたのPOSTメソッドのモデルは' TicketAnswer'であり、 'TicketAnswer'は' TicketId'という名前のプロパティを持たないので、何も束縛されません。 –

+1

あなたのコードには何の意味もありません。ビューモデルにはデータモデルを含めるべきではありません( 'Ticket'ではなく' int TicketId'を含む)、それを使用しないときに 'List 'というプロパティがあるのはなぜですか? –

+0

私はフォームを保存するときに使用しますが、すべての回答でビューを作成するために使用します – Alraune

答えて

0

はそれを私のviewmodel上の男を手に入れた私はチケットのIDにフォームに設定された変数を入れて、それはので、私はそれとデータベースを扱うことができた郵便法

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 }) 

に解消されません外部キー、ありがとうございました

関連する問題