2012-07-13 53 views
0

我不知道如何实现这一点,我在控制器文件夹MovieController.cs,并在模型文件夹中的MovieCreateViewModel.cs。我需要为创建,编辑和删除视图添加验证。如何使用一个单独的模型类验证在MVC

MovieDetailsViewModel.cs

public class MovieDetailsViewModel 
{ 
    public int Id { get; set; } 
}  

然后我有我做的参数列表 我在哪里,从这里去请类型MovieDetailsViewModel id的httpPost 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); 
     } 
    } 

感谢

+0

你去通过MVC教程HTTP://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs /添加验证模型 – 2012-07-13 08:11:25

+0

请参阅上面的代码我用编辑的验证替换它看到这是我得到与lambda表达式的错误。谢谢 – 2012-07-13 08:24:54

+0

首先,在您的编辑(GET)方法中,我可以看到您将视图模型指定为参数本身而不是int。这是一个错字吗?如果不是,请注意,您不必指定整个Viewmodel,它可以只是公共的ActionResult Edit(int id)。放一个断点,看看你作为id得到什么。而且你不必过滤哪里,然后通过单或默认过滤。的SingleOrDefault将做的工作.. – 2012-07-13 08:32:40

回答

0

更好的做法将使用单独的模型和视图模型。将您的模型,视图模型,然后通过它来查看

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); 
    } 
} 
1

验证现在来对你的模型实例进行,以检查它,你这样做:

ModelState.IsValid 

在控制器方法保存操作之前。只要视图上的输入名称与您的模型类的属性名称相对应,绑定和验证将在您的操作方法执行之前隐式执行。要在视图中显示验证消息,请将Html.ValidationMessage()添加到视图顶部。希望这可以帮助。顺便说一句,它值得检查Foolproof Validation其中提供条件验证属性和一些其他好东西。

+0

看看万无一失 – 2012-07-13 10:15:56