2013-04-21 49 views
1

我是mvc的新用戶。我正在創建一個測試應用程序mvc爲什麼我必須將參數作爲查詢字符串傳遞給MVC中的Action方法?

here我已經研究了mvc作品以URL爲/[Controller]/[ActionName]/[Parameters]

但在我的應用程序必須通過參數作爲/home/index?name=test。我認爲它應該作爲/home/index/test。但是這樣做不起作用。

以下是在Global.asax.cs

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 = UrlParameter.Optional } // Parameter defaults 
     ); 

    } 

ActionMethodhomeController

public ActionResult Index(String name) 
    { 
     ViewBag.name = name; 
     return View(); 
    } 

路由代碼Index.cshtml

@{ 
ViewBag.Title = "Index"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 

} 

    <h2>@ViewBag.name</h2> 

任何人都可以幫我找出爲什麼它不工作在/home/index/test格式。

謝謝。

+0

什麼是你所得到的錯誤?索引操作是否被調用,但參數未設置? – 2013-04-21 09:20:39

+0

它沒有給出任何錯誤。只是給我看一個空白頁面。 – 2013-04-21 09:35:06

回答

3
Routes.MapRoute(
     "DefaultWithName", // Route name 
     "{controller}/{action}/{name}", // URL with parameters 
     new { controller = "Home", action = "Index", name = UrlParameter.Optional } 

因爲您的可選參數是「id」,並且在您的控制器中是「名稱」。

+0

其不工作的傢伙... – 2013-04-21 08:14:25

+1

@CodeRider這是正確的答案。確保你沒有其他錯誤 – amd 2013-04-22 05:40:20

2

正如Lars指出的那樣,您的路由將默認參數名稱指定爲ID。您的控制器將其指定爲「名稱」。如果你改變你的控制器參數來說,int ID,那麼home/index/3會起作用。

2

正如@Lars & @Joel指出的那樣,您的路由將默認參數名稱指定爲ID。

聲明

routes.MapRoute(
      "DefaultWithName", // Route name 
      "{controller}/{action}/{name}", // URL with parameters 
      new { controller = "Home", action = "Index", name = UrlParameter.Optional }); 

,並使用路由使用代碼

@Url.RouteUrl("DefaultWithName", new { name = "test" }) 

而不是@Url.Action

相關問題