在新记录中自动设置DateTime

时间:2012-01-04 15:50:17

标签: c# asp.net-mvc asp.net-mvc-3

保存时自动更新编辑视图中的dateTime - 这很好用。我使用以下代码来实现这个......

@Html.HiddenFor(model => model.Posted, Model.Posted = DateTime.Now)
这个问题在于创造新的记录。我正在尝试实现自动日期时间输入,但上面的代码不起作用?

正在显示的错误是:

  

NullReferenceException未被用户代码(对象引用)处理   未设置为对象的实例

以下代码来自控制器:

    //
    // GET: /cars/Create

    public ActionResult Create()
    {
        return View();
    }

    // POST: /cars/Create



    [HttpPost]
    [ValidateInput(false)]

    public ActionResult Create(cars newsitem)
    {
        try
        {
            using (var db = new carsNewsEntities())
            {
                db.cars.Add(cars);
                db.SaveChanges();
            }
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

3 个答案:

答案 0 :(得分:1)

我建议不要在知道如何在视图上初始化新对象,而是建议将日期时间设置为1)静态工厂创建方法,您的服务将知道要调用它,或2)空构造函数你的模型对象。

public MyModelObject()
{
    Posted = DateTime.Now;
}

顺便说一句,我认为你得到的是null引用异常,因为你的“已发布”属性可能不可为空......如果我的猜测是正确的,你可以通过让它可以为空来获得工作(但你放弃了非空的强制执行)......

答案 1 :(得分:0)

尝试将新对象传递给您的视图:

// 
// GET: /News/Create 

public ActionResult Create() 
{ 
    return View(new NewsItem ()); 
}

虽然我会在控制器中设置该字段:

// 
// GET: /News/Create 

public ActionResult Create() 
{
    var viewModel = new NewsItem { Posted = DateTime.Now };
    return View(viewModel); 
} 

答案 2 :(得分:0)

即使上面的解决方案有效,但如果你有不同的列CreatedDate和ModifiedDate,那么上面的解决方案是行不通的。 更新记录后设置createdDate为null。 为了克服这一点,我在编辑视图中尝试了以下线,并且工作正常。

@Html.HiddenFor(model => model.EntryDateTimeStamp, Model.EntryDateTimeStamp = Model.EntryDateTimeStamp)
@Html.HiddenFor(model => model.ModifiedDateTime, Model.ModifiedDateTime = DateTime.Now)

同样在Create View中我做了类似的事情

@Html.HiddenFor(model => model.EntryDateTimeStamp, Model.EntryDateTimeStamp = DateTime.Now)

并在控制器中传递新对象,如上所述。

 return View(new NewsItem ());