保存时自动更新编辑视图中的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();
}
}
答案 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 ());