Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/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
C# MVC-如何解决“问题”;SqlException:将datetime2数据类型转换为datetime数据类型导致值超出范围。”;_C#_Asp.net Mvc_Datetime - Fatal编程技术网

C# MVC-如何解决“问题”;SqlException:将datetime2数据类型转换为datetime数据类型导致值超出范围。”;

C# MVC-如何解决“问题”;SqlException:将datetime2数据类型转换为datetime数据类型导致值超出范围。”;,c#,asp.net-mvc,datetime,C#,Asp.net Mvc,Datetime,我有一个模型,它有一个DateTime属性,用于存储创建对象的日期 public class UserProfile { public int Id { get; set; } public string Name { get; set; } [Required] [DataType(DataType.Date)] public DateTime DateCreated { get; set; } } 创建用户配置文件时,在create方法中设置Da

我有一个模型,它有一个DateTime属性,用于存储创建对象的日期

public class UserProfile
{
    public int Id { get; set; }

    public string Name { get; set; }

    [Required]
    [DataType(DataType.Date)]
    public DateTime DateCreated { get; set; }
}
创建用户配置文件时,在create方法中设置DateCreated,如下所示:

profile.DateCreated = DateTime.Now.Date;
但是在我的编辑方法中,我不想更改这个DateCreated值,所以我将其从Include属性中删除

即使如此,一个日期时间值01/01/0001仍被传递给模型,尽管我不希望该字段被更新。这就是导致SqlException的原因,但我不知道如何停止它

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "Id,Name")] UserProfile profile)
    {
        if (ModelState.IsValid)
        {
            db.Entry(profile).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(profile);
    }
我尝试删除[Required]属性,但仍然没有解决

我通过添加一个?在DateTime之前

public DateTime? DateCreated { get; set; }

但这导致在我编辑用户配置文件时,DateCreated变为null。

的可能重复项请勿在视图中使用数据模型,尤其是在编辑数据时。使用视图模型(不包括创建日期的属性)。在POST方法中,根据ID获取数据模型并更新其属性,然后保存它。如果希望使用数据模型,可以保留include并在视图中添加
@Html.HiddenFor(…)
,以便保留value@Rafalon“…在视图中添加@Html.HiddenFor(…),以便保留该值”如果用户是恶意的,则不会保留该值。一般来说,依赖客户来完成这项工作是不好的做法。实际上,这是两种不好的做法合一。正如@StephenMuecke所指出的,您不应该使用实体作为视图模型,但是如果OP没有直接保存发布的实体,即使这样也不会成为问题,这总是一个可怕的想法。您应该始终从一个新的实体实例(新建或从数据库中获取)开始,然后将发布的值映射到该实例上,最后保存该实例。这将确保1)实体是绑定到上下文的属性,2)只有您希望可编辑的值才是可编辑的。