C# 实体框架/ASP.NET MVC 5日期时间异常
我在MovieController中添加和编辑动作,这两个动作都会转到MovieForm视图。在MovieForm视图中,我有以下内容: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; }
@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);
}