私は 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) でエラーが発生します。
サーバー側とクライアント側の両方の検証が必要です。手伝って頂けますか ?