路由与参数冲突问题

时间:2014-11-09 10:31:41

标签: asp.net-mvc parameters routes

我的路线配置:

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:如果因为我的英语不好而不能为你澄清,我可以提供一个屏幕视频,记录我是如何得到错误的!

1 个答案:

答案 0 :(得分:1)

你的路线中有pnumbers = "",但它没有标记为可选字段(如果它位于中间,并且周围有必填字段,则无法将其设为可选字段。)

尝试将其默认为"0"或其他内容。

另一种方法是将此选项移动到所需参数的末尾,并将其标记为可选,如:

pnumbers = UrlParameter.Optional

如果你遇到路由问题,值得安装route debugger,因为它在页面底部添加了一个很好的界面,显示哪些路由会触发,哪些路由不会。这对IMO的复杂路线至关重要。