1

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

在这里,我研究了mvc与 url 一起使用的/[Controller]/[ActionName]/[Parameters]

但在我的应用程序中,我必须将参数作为/home/index?name=test. 我认为它应该作为/home/index/test. 但它不能以这种方式工作。

这是ActionMethodhomeController

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

    }

索引.cshtml

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

 }

  <h2>@ViewBag.name</h2>

谁能帮我找出为什么它不能以/home/index/test格式工作。

谢谢。

4

3 回答 3

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

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

于 2013-04-21T08:12:02.307 回答
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

于 2013-04-22T05:33:32.190 回答
2

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

于 2013-04-22T04:52:19.837 回答