私はMovieController内でMovieFormビューに移動するAddアクションとEditアクションを持っています。 MovieFormビューの中で、私は以下があります。Entity Framework/ASP.NET MVC 5 DateTime例外
@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; }
}
とのViewModel:
public class MovieFormViewModel
{
public IEnumerable<Genre> Genres { get; set; }
public Movie Movie { get; set; }
public bool IsNew { get; set; }
}
}
あなたが見ることができるように、「はdoesnのReleaseDateプロパティで何か問題があるように見えます。データベース(localDB)では、タイプは "datetime"です。
しかし、私が映画を編集してリリース日を変更するときは、すべてが問題ありません。私は映画を(たとえその同じMovieFormが)追加した場合しかし、私はこの例外を取得:
datetimeデータ型 にDATETIME2データ型の変換は、範囲外の値になりました。ステートメントは終了されました。
私はすべてのステップを試してみましたが、try catchを試していますが、上記のエラーが起こっていることから抽出できる唯一のものです。まったく同じ形式と全く同じSave()アクションを使用してデータベースを編集して正常に書き込むことはできませんが、何らかの理由で新しいエントリを作成すると機能しません。私は日付をまったく同じ方法でDBに直接入力しても機能します。
私はまた、this questionを見たことがありますが、それは私が持っている問題に対処していません。あなたがそれらを見ることができるので、私もここに私の行動の両方を提供します:例外が_context.SaveChanges()メソッドで発生していることを
public ActionResult Edit(int id)
{
var movie = _context.Movies.SingleOrDefault(m => m.Id == id);
//Make sure that the id actually exists:
if (movie == null)
{
return HttpNotFound();
}
var viewModel = new MovieFormViewModel
{
Movie = movie,
IsNew = false,
Genres = _context.Genres.ToList()
};
return View("MovieForm", viewModel);
}
public ActionResult Save(Movie movie)
{
if (movie.Id == 0)
{
_context.Movies.Add(movie);
}
else
{
//This method of data entry allows you to explicitly control which items in the Db can be updated by the user. More secured than an update-all method like TryUpdateModel()
var movieInDb = _context.Movies.Single(c => c.Id == movie.Id);
movieInDb.ReleaseDate = movie.ReleaseDate;
movieInDb.Name = movie.Name;
movieInDb.Genre = movie.Genre;
movieInDb.NumberInStock = movie.NumberInStock;
movieInDb.DateAdded = DateTime.Today.Date;
}
_context.SaveChanges();
return RedirectToAction("Index", "Movies");
}
public ActionResult New()
{
var genres = _context.Genres.ToList();
var viewModel = new MovieFormViewModel
{
Genres = genres,
IsNew = true
};
return View("MovieForm", viewModel);
}
注意を。また、私はmovieInDb.DateAdded = DateTime.Today.Dateを削除しようとしました。 ReleaseDateでこの例外が発生した後に追加したものとは関係ありません。私はまた、どちらかを助けなかったReleaseDateのDateTimeフォーマットで遊んでみました。
エラーがスローされます01/0001)、範囲外です。 (あなたは新しい 'Movie'を追加するときに' DateAdded'の値を設定しているようには見えません) –
Dateフィールドに日付を入力してsubmitをクリックすると、ReleaseDateがMinDateになる方法がわかりません。 –
その後、その 'DateAdded' - あなたのコードをデバッグしてください! –