Я единственный, у кого есть эта проблема, или я делаю это в совершенно неправильном направлении.
У меня есть значение DateTime для представления:
<div class="control-group">
@Html.Label("Appointment date", null, new { @class = "control-label" })
<div class="controls">
<div class="input-append">
@Html.TextBoxFor(model => model.Appointment.Client_PreferredDate, new { @readonly = "readonly" })
<span class="add-on margin-fix"><i class="icon-th"></i></span>
</div>
<p class="help-block">
@Html.ValidationMessageFor(model => model.Appointment.Client_PreferredDate)
</p>
</div>
Значения передаются в действие Controller (я вижу это значение, и я знаю, что он дает формат, который не является DateTime, т.е. он будет в dd-MM-yyyy). Затем в контроллере я переформатирую его.
[HttpPost]
public ActionResult RequestAppointment(General_Enquiry model, FormCollection fc)
{
model.Appointment.Client_PreferredDate = Utilities.formatDate(fc["Appointment.Client_PreferredDate"]);
ModelState.Remove("Appointment.Client_PreferredDate");
try
{
if (ModelState.IsValid)
{
model.Branch_Id = Convert.ToInt32(fc["selectedBranch"]);
model.Appointment.Branch_Id = Convert.ToInt32(fc["selectedBranch"]);
db.General_Enquiry.AddObject(model);
db.SaveChanges();
return RedirectToAction("AppointmentSuccess", "Client");
}
}
catch (Exception e)
{
Debug.WriteLine("{0} First exception caught.", e);
Debug.WriteLine(e.InnerException);
ModelState.AddModelError("", e);
}
return View(model);
}
Лучшее, что я могу сделать, это использовать ModelState.Remove(), с которым мне действительно неудобно. Я подозреваю, что когда моя модель передается из представления в контроллер, ModelState уже установлен на Неверный, прежде чем я смогу что-либо сделать в контроллере. Любые идеи?
Если я вызываю ModelState.Remove(), все прошло гладко, DateTime принимается базой данных SQL-сервера.
Если по крайней мере я могу обновить или обновить ModelState в любой момент, это устранит мою проблему.
Приветствия.