我不知道如何实现这一点,我在Controllers文件夹中有一个MovieController.cs,在Models文件夹中有一个MovieCreateViewModel.cs。我需要为创建,编辑和删除视图添加验证。
MovieDetailsViewModel.cs
public class MovieDetailsViewModel
{
public int Id { get; set; }
}
然后我有MovieController.cs
public class MovieController : Controller
{
Connect connection;
MovieCreateViewModel movie;
MovieDetailsViewModel id;
public MovieController()
{
this.connection = new Connect();
this.movie = new MovieCreateViewModel();
this.id = new MovieDetailsViewMode();
}
public ActionResult Edit(MovieDetailsViewModel id)
{
movie = this.connection.MovieContext.Where(m => m.ID == id).SingleOrDefault(); **//I get an error here**
return View(movie);
}
//
// POST: /Movie/Edit/5
[HttpPost]
public ActionResult Edit(MovieCreateViewModel movieedit)
{
try
{
if (ModelState.IsValid)
{
this.connection.MovieContext.AddObject(movieedit);
this.connection.MovieContext.Context.SaveChanges();
return RedirectToAction("Index");
}
}
catch
{
return View(movieedit);
}
}
对于httpPost,我在参数列表中创建了类型MovieDetailsViewModel id
请问我从哪里开始?
由于
答案 0 :(得分:1)
现在将对您的模型实例执行验证,以进行检查,您执行以下操作:
ModelState.IsValid
在保存操作之前的控制器方法中。只要视图上的输入名称与模型类的属性名称相对应,就会在执行操作方法之前隐式执行绑定和验证。要在视图中显示验证消息,请在视图顶部添加Html.ValidationMessage()。希望这可以帮助。顺便说一下,它值得一试Foolproof Validation,它提供条件验证属性和其他一些好东西。
答案 1 :(得分:0)
更好的练习将使用单独的模型和视图模型。将模型转换为viewmodel,然后将其传递给view
public ActionResult Edit(int id)
{
var movie = this.connection.MovieContext.SingleOrDefault(m => m.ID == id);
var vm = new MovieCreateViewModel{ Id = movie.Id};
return View(vm);
}
//
// POST: /Movie/Edit/5
[HttpPost]
public ActionResult Edit(MovieCreateViewModel vm)
{
try
{
if (ModelState.IsValid)
{
var movie = new Movie{Id = vm.Id};
this.connection.MovieContext.Attach(movie);
this.connection.MovieContext.Context.SaveChanges();
return RedirectToAction("Index");
}
}
catch
{
return View(movieedit);
}
}