Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何在编辑视图中不包含所有字段,但不获取“转换为datetime时溢出”_Asp.net Mvc 3_C# 4.0 - Fatal编程技术网

Asp.net mvc 3 如何在编辑视图中不包含所有字段,但不获取“转换为datetime时溢出”

Asp.net mvc 3 如何在编辑视图中不包含所有字段,但不获取“转换为datetime时溢出”,asp.net-mvc-3,c#-4.0,Asp.net Mvc 3,C# 4.0,我对MVC3有些陌生,所以这可能很简单。我有一个紧凑的SQL 4数据库。有一个Post对象具有内容字符串、主题字符串、When DateTime和Reposted DateTime可为空字段。在Create的Post方法中,我手动强制When属性为DateTime.Now,效果非常好 但是,在我的编辑视图中,我不想显示此字段,或者至少不让它成为可编辑字段。当我没有将其作为可编辑字段放在“编辑”视图上,并且他们更改了内容,然后单击“保存”时,我会收到消息: 转换为datetime时发生溢出 在编辑

我对MVC3有些陌生,所以这可能很简单。我有一个紧凑的SQL 4数据库。有一个Post对象具有内容字符串、主题字符串、When DateTime和Reposted DateTime可为空字段。在Create的Post方法中,我手动强制When属性为DateTime.Now,效果非常好

但是,在我的编辑视图中,我不想显示此字段,或者至少不让它成为可编辑字段。当我没有将其作为可编辑字段放在“编辑”视图上,并且他们更改了内容,然后单击“保存”时,我会收到消息:

转换为datetime时发生溢出

在编辑回发期间,我将重新发布字段设置为DateTime。现在,它必须是When字段。当我调试回发时,我看到Post对象中只填充了我在屏幕上显示的字段的值。因此,我决定直接从数据中通过LINQ查询获取When字段,但当我到达SaveChanges时,它失败了,并说:

ObjectStateManager中已存在具有相同密钥的对象。ObjectStateManager无法跟踪具有相同密钥的多个对象

那么,如何更新一个对象,让用户只更改几个相关字段呢?Post对象似乎没有获取所有现有值,因为它们没有显示在屏幕上。我怎样才能完全填满那个物体

编辑:这里是Post方法

[HttpPost]
public ActionResult Edit(Post post) {
  if (ModelState.IsValid) {
    db.Posts.Attach(post);

    int Successes = 0;
    int Failures = 0;

    this.SendEMail(post, out Successes, out Failures);
    post.Successes = Successes;
    post.Failures = Failures;
    post.Reposted = DateTime.Now;

    db.ObjectStateManager.ChangeObjectState(post, EntityState.Modified);
    db.SaveChanges();
    return RedirectToAction("Index");
  }

  return View(post);
}

在视图中为不想显示的字段包括一个隐藏字段,例如

@Html.HiddenFor(model => model.When)