1

我有一个小问题,我认为是我的路由配置。下面是我的情况:

情况

我有一个页面列出了附属于实体的员工。他们可以从实体页面添加新员工。添加员工后,可以单击它们以获取有关该员工的详细信息。

创建和进一步的信息工作正常,员工被创建并且他们的 ID 正常增加。

问题

当创建员工并为其分配超过 1 个字符的 ID 时(发生在超过 10 名员工或当 ASP.NET 决定将 ID 跳转到大约一千左右时),特定员工的详细信息视图会显示 404 并简单地显示:

“您要查找的资源已被删除、更改名称或暂时不可用。”

0-9 范围内的 ID 似乎可以正常工作,但只要 ID 超过 1 个字符(例如 10),就会出现问题。

路由配置.cs

         routes.MapRoute(
             "EmployeeDetails",
             "{controller}/{id}-{Title}/{action}/{eid}",
             new { controller = "Farm", action = "EmployeeDetails", id = UrlParameter.Optional, title = UrlParameter.Optional, eid = UrlParameter.Optional},
             new { id = @"\d+", eid = @"\d" }
         );

农场控制器.cs

        public ActionResult Employee(int id = -1, int eid = -1)
        {

        if(id == -1 || eid == -1){
            RedirectToAction("Index","Home");
        }
        Farm f = db.Farms.Find(id);
        ViewBag.FarmName = f.Name;
        ViewBag.FarmUrl = f.getLink(true);
        Worker w = db.Workers.Find(eid);
        w.TimeSheets = w.TimeSheets.OrderByDescending(m => m.TimeSheetID).ToList();

        return View(w);
    }

提前感谢您的帮助,如果我没有提供所有相关信息,我们深表歉意。第一次发帖,如果您需要了解其他信息,请告诉我。

干杯

4

1 回答 1

0

你的约束应该是这样的:

new { id = @"\d+", eid = @"\d+" }

目前您正在为 eid 字段使用正则表达式 \d,这意味着只有单个符号

于 2014-07-16T06:27:39.357 回答