【问题标题】:Routing with parameter conflicts issue路由参数冲突问题
【发布时间】:2014-11-09 10:31:41
【问题描述】:

我的路线配置:

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});
}

当我第一次访问控制器时:

在不输入/修改任何参数的情况下点击提交按钮,没有错误:

但是如果我修改第三个或第四个参数,我会出现这个错误:

路由表中没有路由与提供的值匹配。

我调试了代码,在HttpPost中的RedirectToRoute行,除了我修改的参数之外,每个参数都差不多。我想不出发生此错误的原因!

如果我输入/修改了第二个参数(从上到下的第二个文本框),我也没有错误!

非常感谢任何帮助!

P/s : 如果因为我的英语不好而对你来说不够清楚,我可以提供一个屏幕视频来记录我是如何得到错误的!

【问题讨论】:

    标签: asp.net-mvc parameters routes


    【解决方案1】:

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

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

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

    pnumbers = UrlParameter.Optional
    

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

    【讨论】:

    • 谢谢!有效!我还是不明白为什么不输入/修改任何参数的提交不会产生任何错误?
    • 路由对于错误来说是一个奇怪的问题,我建议进入 Nuget 并将Route Debugger 添加到您的项目中。它会在页面底部生成一个漂亮的界面,向您显示哪些路线将匹配哪些不匹配,这对于复杂的路线非常方便。我会用这些信息更新我的帖子
    • 哦,谢谢你的建议!我马上去拿!再次感谢!最美好的祝愿!
    • 没问题,很高兴能帮上忙。玩得开心:)
    猜你喜欢
    • 2015-09-27
    • 2018-10-01
    • 2015-10-08
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多