RedirectToAction、RedirectToActionPermanent

 

一、

假設有一Controller,當出現Exception時,

則導到一個錯誤頁面,秀出錯誤訊息,

此範例示範如何藉由ViewBag傳值到錯誤頁面

Controller

namespace MvcShopping.Controllers
{
    public class OrderController
    {
        [HttpPost]
        public ActionResult Complete(OrderHeader form)
        {
...略
            try
            {
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                return RedirectToAction("Error","Order", new {ex=ex.ToString()});
            }
...略
        }

        public ActionResult Error(string ex)
        {
            ViewBag.Error = ex;
            return View();
        }
    }
}

 

Error.cshtml

@{
    ViewBag.Title = "Error";
}

@ViewBag.Error

 

二、列出多載方法

RedirectToAction(String actionName) 使用動作名稱重新導向至指定的動作。
RedirectToAction(String actionName, Object routeValues) 使用動作名稱和路由值重新導向至指定的動作。
RedirectToAction(String actionName, String controllerName) 使用動作名稱和控制器名稱重新導向至指定的動作。
RedirectToAction(String actionName, RouteValueDictionary routeValues) 使用動作名稱和路由字典,重新導向至指定的動作。
RedirectToAction(String actionName, String controllerName, Object routeValues) 使用動作名稱、控制器名稱和路由字典,重新導向至指定的動作。
RedirectToAction(String actionName, String controllerName, RouteValueDictionary routeValues) 使用動作名稱、控制器名稱和路由值,重新導向至指定的動作。

例如:

RedirectToAction(String actionName)

public ActionResult About()
{
    ViewBag.Message = "Your application description page.";

    return RedirectToAction("Index");
}

RedirectToAction(String actionName, Object routeValues)

public ActionResult About()
{
    ViewBag.Message = "Your application description page.";

    return RedirectToAction("Index", new { page = 3 });
}

RedirectToAction(String actionName, String controllerName)

public ActionResult About()
{
    ViewBag.Message = "Your application description page.";

    return RedirectToAction("Index", "Home");
}

 

三、使用Http 301永久轉址

RedirectToAction為302暫時轉址,可搭配Permanent字眼,

成以下六種多載方法,來使用Http 301永久轉址

RedirectToActionPermanent(String actionName)
RedirectToActionPermanent(String actionName, Object routeValues)
RedirectToActionPermanent(String actionName, String controllerName)
RedirectToActionPermanent(String actionName, RouteValueDictionary routeValues)
RedirectToActionPermanent(String actionName, String controllerName, Object routeValues)
RedirectToActionPermanent(String actionName, String controllerName, RouteValueDictionary routeValues)