所以我有一个名为Cars的控制器,它有:
namespace MySite.Controllers
{
public class CarsController : ApplicationController
{
public ActionResult Index()
{
return View();
}
public ActionResult New()
{
return View();
}
[httppost]
public ActionResult New()
{
return View();
}
public ActionResult Details(int id)
{
return View();
}
}
}
全球性的asax
routes.MapRouteLowerCase(
"Cars", // Route name
"Cars/{id}", // URL with parameters
new { controller = "Cars", action = "Details", id = URLParameter.Optional}
);
routes.MapRouteLowerCase(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = URLParameter.Optional} // Parameter defaults
);
以下是我得到的错误:
参数字典包含非参数的空条目
中方法的可空类型
注意:它让我重定向到“详细信息”视图,并且即使我想要转到“新”视图,也要求输入int。我不确定发生了什么事?我基本上想要将我的网址降低,同时删除启动器路由上的网址上的“操作”...这有意义吗? Anyhelp非常感谢!感谢!!!
答案 0 :(得分:3)
以下所有代码均适用于第一个路线定义 第二条路线定义应保持不变。
看一下第一个路线定义:
routes.MapRouteLowerCase(
"Cars", // Route name
"Cars/{id}", // URL with parameters
new { controller = "Cars", action = "Details", id = URLParameter.Optional}
);
当您访问Cars/New
时,第一条路线会被点击,因为所有参数都可以轻松应用为:
"Cars"
"Details"
"New"
如果您希望第一个路线定义仅涵盖某些ID,则应对其进行约束或更改路线。数字ID的约束应如下所示:
routes.MapRouteLowerCase(
"Cars", // Route name
"Cars/{id}", // URL with parameters
new { controller = "Cars", action = "Details" },
new { id = @"\d+" }
);
当您访问Cars/New
时,第一条路线不会被命中,因为New
不满足ID约束,因此路线处理将继续下一条路线(这将很好地解决它 - 如应该)。
请注意,id
不再是可选的。如果对它施加约束,则不能。如果你有一个Details
控制器动作,它应该最有可能显示某些细节。所以它实际上需要一些ID。
答案 1 :(得分:0)
如果您的路线设置如下
routes.MapRouteLowerCase(
"Cars", // Route name
"Cars/{id}", // URL with parameters
new { controller = "Cars", action = "Details", id = URLParameter.Optional}
);
这意味着任何以“/ Cars / ...”开头的网址都会将您重定向到详细信息操作,其中包含“/ Cars / New”,它会尝试将“新建”字符串映射到id参数这就是你得到错误的原因。