为什么我必须将参数作为查询字符串传递给MVC中的Action Method?

时间:2013-04-21 08:09:00

标签: asp.net-mvc asp.net-mvc-3 razor

我是mvc的新手。我正在mvc创建一个测试应用程序。

here我研究过mvc使用网址作为/[Controller]/[ActionName]/[Parameters]

但在我的应用程序中,我必须将参数传递为/home/index?name=test。我认为它应该像/home/index/test一样工作。但它不会以这种方式起作用。

ActionMethod

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

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
        );

    }

Index.cshtml

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

 }

  <h2>@ViewBag.name</h2>

任何人都可以帮助我找出为什么它不能以/home/index/test格式工作。

感谢。

3 个答案:

答案 0 :(得分:3)

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

因为您的可选参数显示为“id”,而在您的控制器中它是“名称”。

答案 1 :(得分:2)

正如Lars所指出的,您的路由将默认参数名称指定为ID。您的控制器将其指定为“名称”。如果您将控制器参数更改为int ID,那么home / index / 3将起作用。

答案 2 :(得分:2)

正如@Lars&amp; amp; @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