ASP.NET MVC 3.0 RTM

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();

}

 

Dotblogs 的標籤: