2013-04-21 20 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

相关问题