Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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# 实体框架/ASP.NET MVC 5日期时间异常_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 实体框架/ASP.NET MVC 5日期时间异常

C# 实体框架/ASP.NET MVC 5日期时间异常,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我在MovieController中添加和编辑动作,这两个动作都会转到MovieForm视图。在MovieForm视图中,我有以下内容: @Html.TextBoxFor(m => m.Movie.ReleaseDate, "{0:MMM dd yyyy}", new { @class = "form-control" }) 另请参见我相应的电影模型: public class Movie { public int Id { get; set; }

我在MovieController中添加和编辑动作,这两个动作都会转到MovieForm视图。在MovieForm视图中,我有以下内容:

@Html.TextBoxFor(m => m.Movie.ReleaseDate, "{0:MMM dd yyyy}", new { @class = "form-control" })
另请参见我相应的电影模型:

public class Movie
    {
        public int Id { get; set; }
        [Required]
        [StringLength(255)]
        public string Name { get; set; }

        public Genre Genre { get; set; }
        [Required]
        [Display(Name = "Genre")]
        public byte GenreId { get; set; }
        [Display(Name ="Release Date")]
        public DateTime ReleaseDate { get; set; }
        public DateTime DateAdded { get; set; }
        [Display(Name = "Number in Stock")]
        public int NumberInStock { get; set; }

    }
和视图模型:

public class MovieFormViewModel
    {
        public IEnumerable<Genre> Genres { get; set; }
        public Movie Movie { get; set; }
        public bool IsNew { get; set; }
    }
}
请注意,异常发生在_context.SaveChanges()方法上。还要注意,我已经尝试删除movieInDb.DateAdded=DateTime.Today.Date;但这与它没有任何关系,因为我是在经历了这个与ReleaseDate有关的异常之后添加它的。我还尝试过使用ReleaseDate的DateTime格式,但也没有任何帮助。

在MovieController的Save()操作中,仔细查看if语句。由于异常仅在添加新电影时发生,这意味着在movie.Id==0(新电影)的情况下存在问题。问题是movie.DateAdded属性不是由表单设置的,因此根本没有设置。这导致movie.DateAdded为null,从而引发异常。修复集movie.DateAdded等于提交到数据库之前的当前日期,如下所示:

if (movie.Id == 0)
            {
                movie.DateAdded = DateTime.Now;
                _context.Movies.Add(movie);
            }

引发错误的原因是
ReleaseDate
DateAdded
DateTime.MinDate
(01/01/0001)并且超出范围。(在添加新的
电影时,您似乎没有设置
DateAdded
的值)我不明白当我在ReleaseDate的文本字段中输入日期并单击submit时,它的
DateAdded
-调试您的代码!调试器告诉我“ReleaseDate在当前上下文中不存在”,但事实并非如此-表单中正确地包含了
@Html.TextBoxFor(m=>m.Movie.ReleaseDate,“{0:MMM dd yyyy}”,新的{@class=“form control”})
。其他所有的酒店都可以使用完全相同的模式。请看以下帖子:
if (movie.Id == 0)
            {
                movie.DateAdded = DateTime.Now;
                _context.Movies.Add(movie);
            }