2011-02-16 21 views
1

這裏是我的路線:重定向到行動保持路由參數上的新動作無效

_routes = RouteTable.Routes; 

_routes.Clear(); 

_routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
_routes.IgnoreRoute("{*favicon}", new {favicon = @"(.*/)?favicon.ico(/.*)?"}); 

_routes.MapRoute(
    "Message-specific Actions", 
    "Messages/{message}/{action}", 
    new {controller = "Messages", action = "ViewMessage"}, 
    new {message = @"\d+"} 
    ); 

_routes.MapRoute(
    "General Message Actions", 
    "Messages/{action}", 
    new {controller = "Messages", action = "Index"}, 
    new {action = @"\D+"} 
    ); 

_routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new {controller = "Home", action = "Index", id = ""} // Parameter defaults 
    ); 

_routes.MapRoute(
    "Catch All", 
    "{*path}", 
    new {controller = "Error", action = "Error"} 
    ); 

這裏是我的控制器的相關部分:

public class MessagesController 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    // GET: ~/Messages/1 
    public ActionResult ViewMessage(int message) 
    { 
     return View(// stuff to get message from repo); 
    } 

    [HttpPost] 
    // POST : ~/Messages/1/Delete 
    public ActionResult Delete(int message) 
    { 
     // do stuff 
     return RedirectToAction("Index"); 
    } 
} 

問題是,後在瀏覽器的URL在我看來Delete不是~/Messages/,而是它(假設message是12)~/Messages/12/Index

索引甚至不接受message參數。我不明白爲什麼會發生這種情況。我需要改變什麼?

回答

0

更換以下規則

_routes.MapRoute(
    "Message-specific Actions", 
    "Messages/{message}/{action}", 
    new {controller = "Messages", action = "ViewMessage"}, 
    new {message = @"\d+"} 
    ); 

_routes.MapRoute(
    "Message-specific Actions", 
    "Messages/{action}/{message}", 
    new {controller = "Messages", action = "ViewMessage"}, 
    new {message = @"\d+"} 
    ); 

有用。

在編寫規則時,您應該知道只有最後一個參數可以是可選的,並且必須在之前放置必需的參數。替換這個不符合規則(修改後的),儘管它應該。我沒有確切的理由,但是當你傳遞第一個(消息[隱含地]和第三個參數[動作]時,它也試圖匹配{消息},這是不合邏輯的。所以這個規則也是在開頭部分強制參數,如stackoverflow question中所討論的。

0

我認爲你需要切換您的具體消息操作「路線的順序和「一般郵件操作」

+0

這沒有幫助,因爲它會導致ViewMessage路由的URL變成'/ Messages/ViewMessage?message = 12`而不是所需的`/ Messages/12`。 – adamjford 2011-02-18 18:58:49

相關問題