我是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
格式工作。
感谢。
答案 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