2012-07-13 68 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