2

私は MVC で作業を開始し、現在アプリケーションに取り組んでいます。ビューからコントローラ アクションにデータを渡そうとしているときに、小さな問題が発生しました。

これは私のモデルです:

public class TicketIndexModel
{
    public IEnumerable<Ticket> ticketList { get; set; }
    public Ticket newTicket { get; set; }

}

これは私のコントローラーアクションです:

public ActionResult AddTicket(Ticket ticket)
    {
        string user = User.Identity.Name;
        TicketDetail ticketDetails = new TicketDetail();

        if (ModelState.IsValid)
        {
            ticket.DateCreated = DateTime.Now;
            ticket.Status = "submitted";
            ticket.UserName = user;
            db.Tickets.Add(ticket);
            db.SaveChanges();

         //some other stuff



            return RedirectToAction("Index");
        }

ビューでは、最初にすべてのチケットを表示し、その後、新しいチケットを追加するための小さなフォームを表示します。フォームはこんな感じ。

@using (Html.BeginForm("AddTicket","Ticket",FormMethod.Post)) {

    <div class="editor-label">
        @Html.LabelFor(model => model.newTicket.Title)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.newTicket.Title)
        @Html.ValidationMessageFor(model => model.newTicket.Title)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.newTicket.Description)
    </div>
    <div class="editor-field">
        @Html.TextAreaFor(model => model.newTicket.Description, new { rows= "8",cols="2"})
        @Html.ValidationMessageFor(model => model.newTicket.Description)
    </div>

      <p>
        <input type="submit" value="Submit" />
    </p>

}

私が直面している問題は、新しいチケットを追加しようとすると、チケット パラメータが常に null であるため、If(ModelState.Isvalid) <- が常に false であるため、DB に新しいチケットを追加できないことです。

誰にも理由はありますか?

後で編集

私のモデルは今です:

public IPagedList<Ticket> ticketList { get; set; }

    //[Required(ErrorMessage ="Title required")]
    [Display(Name = "Title")]
    public string TicketTitle { get; set; }

    //[Required(ErrorMessage="Description Required")]
    [Display(Name = "Description")]
    public string TicketDescription { get; set; }

私の方法は今です:

    [HttpPost]
    public ActionResult AddTicket(TicketIndexModel newTicket)
    {
        string user = User.Identity.Name;     

        Ticket ticket = new Ticket();

        if (ModelState.IsValid)
        {
            ticket.Title = newTicket.TicketTitle;
            ticket.Description = newTicket.TicketDescription;
            ticket.DateCreated = DateTime.Now;
            ticket.Status = "open";
            ticket.UserName = user;
            db.Tickets.Add(ticket);
            db.SaveChanges();

私が今抱えている問題は次のとおりです。

モデルの場合、コメント [必須] チケットを追加できます。そうでない場合、コントローラでは、新しいチケットを送信するたびに署名の newTicket が null になります。しかし、コントローラーが if(ModelState.IsValid) に入り、db.SaveChanges(ticket) でエラーが発生します。

サーバー側とクライアント側の両方の検証が必要です。手伝って頂けますか ?

4

1 に答える 1