ASP MVC 3 サイトでは、ユーザーが不完全なフォームに入力し、そのレコードをデータベースに保存し、後でフォームに戻ることができるようにしたいと考えています。間違って入力されたフィールドがあった場合、ユーザーが保存を押したときにそれらのエラー メッセージが表示されるようにします。
ただし、生年月日フィールドに固有の問題が発生しています。ユーザーが などの誤った日付を入力した14/01/2011
場合、ユーザーが保存を押してモデル オブジェクトが POST でコントローラー アクションに戻ると、生年月日が空白になります。その後、条件に失敗if (ModelState.IsValid)
し、データベースに保存されず、生年月日が空白でビューに戻されます。
ユーザーがこのフィールドに間違った日付を入力できるようにする方法はありますか? jQuery 入力マスクを使用しているため、入力される値は常に数値で、MM/DD/YYYY 形式になります。
モデル
[DisplayName("Date of Birth")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? Birthdate { get; set; }
コントローラ
[HttpPost]
public ActionResult Edit(Monet.Models.AgentTransmission agenttransmission)
{
//Date of birth field is null right here in 'agenttransmission' object if
//user enters incorrect value/date
//redirect if security is not met.
if (!Security.IsModifier(User)) return RedirectToAction("Message", "Home", new { id = 1 });
//Tax Id security
ViewBag.FullSSN = Security.IsFullSsn(User);
try
{
agenttransmission = AgentTransmissionValidator.ReformatFields(agenttransmission);
ViewBag.ErrorMessage = AgentTransmissionValidator.ValidateAgent(agenttransmission);
if (ModelState.IsValid)
{
//Whole bunch of code to determine if input is complete/incomplete
//Save the record
db.Entry(agenttransmission).State = EntityState.Modified;
db.SaveChanges();
} //end if model state valid
}
catch (DbEntityValidationException dbEx)
{
ViewBag.ErrorMessage = "An error has occurred, we apologize for the incovenience. IT has been notified and will resolve the issue shortly.";
SendEmail.ErrorMail(Common.ErrorCheck.CombineDbErrors(dbEx));
}
catch (Exception ex)
{
ViewBag.ErrorMessage = ErrorCheck.FriendlyError(ex);
SendEmail.ErrorMail(ex);
}
return View(agenttransmission);
}
意見
<div class="M-editor-label">
@Html.LabelFor(model => model.Birthdate)<span class="req">*</span>
</div>
<div class="M-editor-field">
@Html.EditorFor(model => model.Birthdate)
@Html.ValidationMessageFor(model => model.Birthdate)
</div>