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());
}