我的路线配置:
routes.MapRoute(
"LastTwoRoute",
"thong-ke-ket-qua-xo-so-2-so-cuoi/{cityID}/{pnumbers}/{pdays}/{ponlySpecial}",
new { controller = "LastTwo", action = "Index",
cityID = "MB",
pnumbers = "",
pdays = 1000,
ponlySpecial = false
});
控制器:
[HttpGet]
public ActionResult Index(string cityID, string pnumbers, int pdays, bool ponlySpecial)
{
[HttpGet]
public ActionResult Index(string cityID, string pnumbers, int pdays, bool ponlySpecial)
{
LastTwoParameters lastTwoParameters = new LastTwoParameters();
lastTwoParameters.listCities = Common.GetDropDownCitiesList();
lastTwoParameters.Numbers = pnumbers;
lastTwoParameters.Days = pdays;
lastTwoParameters.OnlySpecial = ponlySpecial;
lastTwoParameters.listLastTwoResult = new List<getReport_LastTwo_Result>();
if (TempData["Redirection"] != null || !string.IsNullOrEmpty(pnumbers) )
{
if (!string.IsNullOrEmpty(cityID) && pdays > 0)
{
using (KQXS context = new KQXS())
{
lastTwoParameters.listLastTwoResult = context.getReport_LastTwo(cityID, pnumbers, pdays, ponlySpecial).ToList();
}
}
}
return View(lastTwoParameters);
}
[HttpPost]//Run action method on form submission
public ActionResult Index(List<Cities> c, string cityID, string numbers, int days, bool onlySpecial)
{
TempData["Redirection"] = true;
return RedirectToRoute("LastTwoRoute", new {
cityID = (string.IsNullOrEmpty(cityID) ? "MB" : cityID ),
pnumbers = (string.IsNullOrEmpty(numbers) ? string.Empty : numbers) ,
pdays = (days == 0 ? 1000 : days),
ponlySpecial = onlySpecial});
}
当我访问控制器时:
并点击提交按钮而不输入/修改任何参数,没有错误:
但如果我修改第三个或第四个参数,我会遇到此错误:
路由表中没有路由与提供的值匹配。
我对代码进行了验证,并且在RedirectToRoute
中的HttpPost
行,每个参数都与我修改的参数大致相同。我想不出这个错误发生的原因!
如果我输入/修改第二个参数(第二个文本框从上到下计数),我也没有错误!
非常感谢任何帮助!
P / s:如果因为我的英语不好而不能为你澄清,我可以提供一个屏幕视频,记录我是如何得到错误的!
答案 0 :(得分:1)
你的路线中有pnumbers = ""
,但它没有标记为可选字段(如果它位于中间,并且周围有必填字段,则无法将其设为可选字段。)
尝试将其默认为"0"
或其他内容。
另一种方法是将此选项移动到所需参数的末尾,并将其标记为可选,如:
pnumbers = UrlParameter.Optional
如果你遇到路由问题,值得安装route debugger,因为它在页面底部添加了一个很好的界面,显示哪些路由会触发,哪些路由不会。这对IMO的复杂路线至关重要。