2009-09-05 96 views
0

我對我的控制器(控制器名稱是'makemagic')有一個操作,稱爲'dosomething',它接受一個可爲空的int,然後返回視圖'dosomething.aspx'。至少這是我想要做的。似乎不管我被路由到Default()視圖。ASP.NET MVC重定向動作默認?

public ActionResult dosomething(int? id) 
{  
    var model = // business logic here to fetch model from DB 
    return View("dosomething", model); 
} 

有具有繼承System.Web.Mvc.ViewPage

一個/Views/makemagic/dosomething.aspx文件我需要做一些事來我的路線?我在我的global.aspx.cs文件中只有「stock」默認路由;

public static void RegisterRoutes(RouteCollection routes) 
{ 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

} 

我打電話通過這樣的href在另一個頁面;

<a href="/makemagic/dosomething/25">Click Me!</a> 

認真地駕駛我nutso。有關如何解決此問題的任何建議?我試圖在我的路由定義上調試break,並且似乎沒有像期望的那樣發生。

回答

2

更改它,使參數不可爲空,因此它將匹配默認路由,或將名稱更改爲id以外的名稱,並將其作爲查詢參數提供。後者的一個例子是:

public ActionResult dosomething(int? foo) 
{  
    var model = // business logic here to fetch model from DB 
    return View("dosomething", model); 
} 

<a href="/makemagic/dosomething?foo=25">Click me</a> 

它將使用默認的路由實現。或者,你可以做一些與默認路由相區別的事情,然後你就可以擁有一條路由,而不必使用查詢參數。

routes.MapRoute(
     "Default",          // Route name 
     "{controller}/{action}/foo/{id}",    // URL with parameters 
     new { controller = "makemagic", action = "dosomething", id = "" } // Parameter defaults 
); 

<a href="/makemagic/dosomething/foo/25">Click Me!</a> 
+0

感謝您的回覆。我想我只是缺少一些東西: 這樣的行動; ActionResult dosomething(int foo){} 試過這個,失敗了; Click 試過這個,失敗了; Click 一直給我發送/ makemagic/details動作!?!?! 似乎很奇怪,如果我不得不建立一條新路線,這肯定是一種常見的情況?是? – CmdrTallen

+0

甚至嘗試過<%= Html.ActionLink(「makemagic」,「dosomething」,new {foo = 25})%>,這也失敗了。 GRRRR。 – CmdrTallen

+0

如果我複製URL並將其粘貼到一個新窗口中,但它似乎從頁面內部「丟失」。當我粘貼它時,這在瀏覽器中起作用; http:// localhost:port/makemagic/dosomething/foo/25 但是,當它作爲一個href似乎去; http:// localhost:port/home/default 想法? – CmdrTallen