Bind DateTime.Now с использованием MVC3 Razor
0 Computer Guy [2012-02-06 18:35:00]
Я хотел бы жестко записать DateTime.Now (на лицевой стороне) при создании новой записи. Однако я не хочу видеть поля, так как они не потребуют ввода. Используя приведенный ниже код, я бросаю "Ссылка на объект не установлена в экземпляр объекта".
Контроллер:
[HttpPost]
public ActionResult Create(tbl_one tbl_one)
{
if (ModelState.IsValid)
{
db.tbl_one.Add(tbl_one);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(tbl_one);
}
Модель:
public System.DateTime Created { get; set; }
Вид:
<div class="editor-field">
@Html.HiddenFor(model => model.Created, Model.Created = DateTime.Now)
@Html.ValidationMessageFor(model => model.Created)
</div>
c# asp.net asp.net-mvc-3 razor
3 ответа
2 Computer Guy [2012-02-07 10:54:00]
Частичный кредит: MVC3 HTMLHelper по умолчанию
Fix:
@Html.HiddenFor(model => model.Created, new { @Value = System.DateTime.Now })
0 OpticalDelusion [2012-02-06 23:26:00]
Честно говоря, вы, вероятно, не должны делать это на лицевой стороне. Если вы сделаете скрытое поле на лицевой стороне с жестко закодированным значением, например DateTime.Now
, вам все равно придется проверять его на задней панели, чтобы убедиться, что кто-то не отправляет вам плохую ценность в качестве меры предосторожности. Я бы порекомендовал просто установить его в заднюю часть, поэтому вам придется только об этом беспокоиться.
0 Alireza Sabouri [2012-02-06 23:02:00]
Поскольку объект модели еще не установлен, вам необходимо создать экземпляр, когда вы возвращаете представление Create для запроса GET:
[HttpGet]
public ActionResult Create(tbl_one tbl_one)
{
return View(new tbl_one());
}