ASP.NET MVC 3.0 RTM
雖然RTM好久了,不過最近才又有時間可以再來碰碰他,又多了一些新東西,還偷改了一些東西…原本有Sample Code的專案也拔掉了,現在只有一個專案類型可以選擇建立。
1.註冊全域ActionFilter
在Global.asax.cs中,新增了靜態方法RegisterGlobalFilters,之前原本錯誤處理要註冊到每個Controller上面,不過現在可以從這裡統一註冊。
{
filters.Add(new HandleErrorAttribute());
}
2.支援子Action的OutputCache
之前MVC2.0雖然可以在所有Action上面加上OutputCache:
public ActionResult Partial()
{
var model = DateTime.Now;
return View(model);
}
但實際上如果你是在頁面上以<%:Html.Action("Partial") %>呼叫的時候,並沒有效果~但是3.0開始會動了!
3.ViewBag(原本在RC的時候,他叫View而不是ViewBag)
其實他就是之前的ViewData,不過ViewData是Dictionary,而ViewBag是dynamic,直接使用ViewBag可以避免轉型,方便很多~
{
//ViewData["Message"] = "hello";
ViewBag.Message = "hello";
return View();
}
二種取法都取得到:
ViewBag.Message:@ViewBag.Message<br />
4.新的ActionResult
HttpNotFoundResult >>回傳404錯誤。
HttpRedirectResult >> 增加可回傳301狀態,例如:
{
var result = new RedirectResult("url", true);
return result;
//return RedirectPermanent("url");
}
HttpStatusCodeResult >> 回傳自訂代碼,HttpNotFoundResult 那個就是繼承自這個的延伸。
4.輸入驗證
之前我們如果有需要傳送html回到server端,都必需在Action上面增加[ValidateInput(false)]把他關掉;但是因為一個欄位而全部都略過其實有點危險,3.0額外提供了AllowHtml可以使用。(不過用FormCollection接回來的時候,還是得用ValidateInput才可以~
{
public string Name { get; set; }
[AllowHtml]
public string Note { get; set; }
}
public ActionResult P(Person p)
{
return View();
}