asp.net-mvc - ASP.NET MVC2 路由约束 - 可选的数字 ID 参数

标签 asp.net-mvc asp.net-mvc-2 constraints custom-routes

我在我的 ASP.NET MVC2 项目中设置了一个默认路由,并且想为我的其他一些 Controller 添加/修改它。假设我有一个 Customer Controller ,其中的 Details 操作需要“id”参数(int)。例如:

    //
    // GET: /Customer/Details/5
    public ActionResult Details(int id)
    {
      //...
    }

如果用户输入“非数字”,如何添加将返回 404 的路由?
我尝试添加以下“之前”默认路由,但没有用...
    routes.MapRoute(
        "DefaultDigitsId", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index" },
        new { id = @"\d+" }
        );

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

请注意,如果可能,我想保留默认路由...
我的所有 Controller 都使用“详细信息”和“编辑”,其中需要“id”(int)参数。
我想知道是否有一种方法可以在不必指定多条路线(即通用的东西)的情况下实现这一点……当然,目标是如果用户输入诸如“/Customer/Details/apple”之类的内容,它不会抛出一个错误,但将它们带到错误页面...

还有this post这暗示要设置默认值,但我不知道该怎么做...

最佳答案

我没有试过这个,但你可能想试一试:

routes.MapRoute(
    "DefaultDetails",
    "{controller}/Details/{id}",
    new { controller = "Home", action = "Details" },
    new { id = @"\d+" }
    );

routes.MapRoute(
    "DefaultEdit",
    "{controller}/Edit/{id}",
    new { controller = "Home", action = "Edit" },
    new { id = @"\d+" }
    );

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

我希望“Customer/Details/1”使用第一个路由(将 id 验证为数字,调用“Customer/Edit/1”使用第二个路由,同样如此,调用“Customer/Buy/Orange"使用第三条路线,该路线不会尝试以这种方式验证 ID。我是否理解您要正确执行的操作?请告诉我这种方法是否有效。

关于asp.net-mvc - ASP.NET MVC2 路由约束 - 可选的数字 ID 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404040/

相关文章:

asp.net-mvc - ASP.NET MVC, Controller 可以改变提交的值吗?

css - DisplayFor 显示在与 LabelFor MVC 不同的行上

ASP.NET MVC 和 IE 缓存 - 操作响应 header 无效

javascript - ASP.NET MVC 中的 CSS 和 JavaScript 2 页

ios - 如何使用 Objective-C 在约束条件下绘图

ios - 有没有办法使用视觉格式语言将 View 限制在导航栏的底部?

c# - 您将如何在单个 ASP.Net MVC Web 应用程序中构建访问者和管理功能?

c# - 从我自己的网站以编程方式在我用户的 Facebook 墙上发布视频

asp.net-mvc-2 - 类型对象上的 ScaffoldColumn 属性

vb.net - 在 VB.NET 中,如何在具有多重约束的泛型类上指定继承/实现