爲了實現這一處理,咱們須要在MoviesController類中追加第二個Create方法。這個Create方法具備一個[HttpPost]屬性,它意味着咱們將要用它來處理提交到「/Movies/Create」這個URL地址的請求。另外,全部提交到「/Movies/Create」這個URL地址的非POST的請求(即GET請求)將被第一個Create方法進行處理,即簡單地返回一個空的表單。如下代碼爲MoviesController類中的兩個Create方法的所有代碼。數據庫
public ActionResult Create()瀏覽器
{app
return View();spa
}對象
[HttpPost]ci
public ActionResult Create(Movie newMovie)字符串
{string
if (ModelState.IsValid)it
{io
db.Movies.Add(newMovie);
db.SaveChanges();
return RedirectToAction("Index");
}
else
return View(newMovie);
}
以前咱們介紹了ASP.NET MVC能夠自動地將一個URL地址中的查詢字符串中的參數(例如:傳遞「/HelloWorld/Welcome?name=Scott&numTimes=5」)做爲一個方法的參數傳遞到方法中。一樣地,除了傳遞查詢字符串中的參數以外,ASP.NET MVC也能夠用這種方法來傳遞提交後的表單參數。提交後的表單參數能夠做爲一個獨立的參數傳遞到一個方法中。例如ASP.NET MVC framework能夠將咱們提交的表單中的控件值做爲參數傳遞到具備HttpPost屬性的Create方法中。
[HttpPost]
public ActionResult Create(string title, DateTime releaseDate, string genre,decimal price){
提交的表單值也能夠被映射到一個複合的,具備屬性的對象(譬如咱們的Movie類),而且做爲一個單一的參數傳遞到一個方法中。請注意Create方法是怎樣做爲一個參數來接收Movie對象的。
[HttpPost]
public ActionResult Create(Movie newMovie)
{ if (ModelState.IsValid){
db.Movies.Add(newMovie);
db.SaveChanges();
return RedirectToAction("Index");
}
else
return View(newMovie);
}
ModelState.IsValid屬性用來檢查提交的表單中的數據是否可以被用來建立一個Movie對象。若是數據是有效的,咱們的代碼將把提交上來的這個Movie類追加在MoviesDBContext對象的實例中的Movies集合中。調用咱們的MoviesDBContext對象實例的SaveChanges方法將把這個Movie對象保存在數據庫中。保存數據完畢後,代碼把畫面重定向到MoviesController類的Index方法中,瀏覽器中將會打開電影清單顯示畫面,而且在電影清單中顯示剛纔追加的這條數據。若是提交的值是無效的,將會返回到電影信息追加畫面中,而且在表單的各輸入控件中顯示各自的提交的值。各輸入控件的Html.ValidationMessageFor幫助器將會顯示對應的出錯信息。