我有控制器名称:区域和操作名称:Incharges但是我希望URL像这样(带有一些参数的动作名称)
www.example.com/district/incharges/aaa
www.example.com/district/incharges/bbb
www.example.com/district/incharges/ccc
但是,调试teamName时总是在action参数中返回NULL。
路由
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"DistrictDetails",
"District/Incharges/{teamName}",
new { controller = "District", action = "Incharges" }
);
控制器
但是,调试teamName时总是在action参数中返回NULL。
public class DistrictController : Controller
{
public ActionResult Incharges(string teamName)
{
InchargePresentationVM INPVM = new InchargePresentationVM();
INPVM.InitializePath(teamName, string.Empty);
return View("", INPVM);
}
}
查看
@{
ViewBag.Title = "Index";
}
<h2>Index About</h2>
答案 0 :(得分:17)
您必须申报第一个
的具体路线routes.MapRoute(
"DistrictDetails",
"District/Incharges/{teamName}",
new { controller = "District", action = "Incharges", id = UrlParameter.Optional }
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
););
答案 1 :(得分:1)
ASP.NET MVC DefaultModelBinder将尝试对值提供程序中的值进行隐式类型转换,例如。 form,to action方法参数。如果它尝试将类型从值提供程序转换为参数并且无法执行此操作,则会为参数指定null。
关于路由,ASP.NET MVC具有通过配置进行转换的概念。如果您按照转换,那么而不是配置。您可以保留默认路由,并始终通过命名控制器,操作方法和参数名称来获得所需的路由。
使用约定优于配置,您必须保留默认的HomeController,它是应用程序的入口点,然后命名其他控制器,如下所示。这些可以符合您想要的路线名称。
namespace ConversionOverConfiguration
{
public class DistrictController: Controller
{
public ActionResult Incharges(int aaa)
{
//You implementation here
return View();
}
}
}
The route will look as below if you have this conversion implementation
//Controller/ActionMethod/ActionMethodParameter
//District/Incharges/aaa
这将为您提供域URI:www.example.com/district/incharges/aaa。如果操作方法参数类型是字符串,则域URI为:www.example.com/district/incharges/?aaa = name 是一个字符串。然后,您可以保留ASP.NET MVC默认路由
routes.MapRoute
(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional
});