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

и я создал этот класс для обработки ответа билета с Ф.К. на билет

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

Чтобы создать свою форму я создал ViewModel для обработки всех билет отвечает

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

Я получаю сообщение об ошибке «The INSERT заявление конфликтные с ограничением FOREIGN KEY "FK_dbo_TicketAnswers_dbo_Tickets_TicketId", как я могу изменить, что и справиться с этим ФК? Я пробую все виды решения, может кто-нибудь дать отзыв?

+0

Единственное значение, которое возвращает ваша форма для 'Ticket.Id'. Единственным другим элементом управления формой является «Message», но это не означает, что значение будет указано, поскольку его dsabled. И модель в вашем представлении - 'AnswerTicketViewModel', но модель в вашем методе POST -' TicketAnswer', а 'TicketAnswer' не имеет свойства с именем' TicketId', поэтому ничего не будет связано. –

+1

Ничто в коде не имеет большого смысла. Просмотр моделей для редактирования не должен содержать модели данных (просто включите свойство 'int TicketId', а не' Ticket') и почему у него есть свойство 'List ', когда вы его никогда не используете? –

+0

Я использую, когда, но не тогда, когда я сохраняю форму, я использую ее, чтобы сделать вид со всеми ответами – Alraune

ответ

0

получил это ребята на моем ViewModel я поставил переменную, я установить на форме идентификатора билета и сохраняется на методе пост

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

Так что я был в состоянии справиться с базой данных с этим иностранный ключ, спасибо ребятам

Смежные вопросы