Search code examples
c#asp.net-mvc-5

The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value. The statement has been terminated


I Have the following code in my Model

public int Id { get; set; }

    [Required]
    [StringLength(255)]
    public string Name { get; set; }

    public DateTime DateAdded { get; set; }

    [Display(Name = "Release Date")]
    public DateTime ReleaseDate { get; set; }

    [Display(Name = "Number in Stock")]
    public byte NumberInStock { get; set; }

    public Genre Genre { get; set; }

    [Display(Name = "Genre")]
    [Required]
    public byte GenreId { get; set; }

This is my controller coder error point shows

[HttpPost]
    public ActionResult Create(Movie movie)
    {
        _context.Movies.Add(movie);
        _context.SaveChanges();

        return RedirectToAction("Index", "Movies");
    }

And this is the view

<div class="form-group">
    @Html.LabelFor(m => m.Movie.ReleaseDate)
    @Html.TextBoxFor(m => m.Movie.ReleaseDate, "{0:d MMM yyyy}", new { @class = "form-control" })
</div>
<div class="form-group">
    @Html.LabelFor(m => m.Movie.GenreId)
    @Html.DropDownListFor(m => m.Movie.GenreId, new SelectList(Model.Genres, "Id", "Name"), "Select Movie Genre", new { @class = "form-control" })
</div>
<div class="form-group">
    @Html.LabelFor(m => m.Movie.NumberInStock)
    @Html.TextBoxFor(m => m.Movie.NumberInStock, new { @class = "form-control" })
</div>

<button type="submit" class="btn btn-primary">Save</button>

When I click submit button, I get an error:

The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.

Any idea about this problem? I'm assuming it's a datetime issue, but I cannot get the problem. I'm a beginner at this.


Solution

  • The datetime column "DateAdded" is marked Not Nullable in sql.

    Option 1 (change controller):

    [HttpPost]
    public ActionResult Create(Movie movie)
    {
        //setdate
        movie.DateAdded = Datetime.Now;
        _context.Movies.Add(movie);
        _context.SaveChanges();
    
        return RedirectToAction("Index", "Movies");
    }
    

    Option 2 (change model)

    public class Movie 
    {
        public int Id { get; set; }
    
        [Required]
        [StringLength(255)]
        public string Name { get; set; }
    
        public DateTime DateAdded { get; set; } = Datetime.Now;
    
        [Display(Name = "Release Date")]
        public DateTime ReleaseDate { get; set; }
    
        [Display(Name = "Number in Stock")]
        public byte NumberInStock { get; set; }
    
        public Genre Genre { get; set; }
    
        [Display(Name = "Genre")]
        [Required]
        public byte GenreId { get; set; }
    }