【问题标题】:Passing parameters through the url using MVC?使用MVC通过url传递参数?
【发布时间】:2012-10-31 17:08:32
【问题描述】:

我知道你可以通过像 .com/MyPage/?controlID=5 这样的 URL 传递参数,但是你怎么能用像 .com/MyPage/5 这样的东西呢?因此不需要变量名或问号。

【问题讨论】:

    标签: c# html asp.net-mvc razor asp.net-mvc-routing


    【解决方案1】:

    您可以定义自定义路由,或使用模型绑定来获得预期效果。在您的情况下,路线将类似于:

    routes.Add("someRoute",
        "{controller}/{action}/{controlId}",
        new { controller = "Home", action = "Index", controlId = UrlParameter.Optional }
        );
    
    public ActionResult Index(int? controlId)
    {
    }
    

    现在,该路由的唯一“陷阱”是,如果您还指定了默认路由,则这两个路由将发生争用,而您定义的第一个将获胜。如果存在某种形式的区分值(例如,该 controlId 始终与某种模式匹配),那么您始终可以向路由添加 HttpRouteConstraint 以区分您的新路由和默认路由。

    或者,如果您仍在使用默认路由,您可以将操作方法​​上的参数重命名为id,并将查询字符串键更改为“id”:

    public ActionResult Index(int? id)
    {
       // Do Stuff
    }
    

    【讨论】:

    • 这很好,你说得非常透彻和清晰,非常感谢!
    • 有没有办法可以设置 HttpRouteConstraint 来确定 int 或 string 之类的东西,还是必须是“POST”或“GET”之类的东西?
    • 当然 - 查看this 文章以了解如何进行约束。
    【解决方案2】:

    在 MyPageController 中创建一个方法:

    public ActionResult Index (int id)
    {
    }
    

    这将适用于默认路由

    【讨论】:

    • 我试过了,它成功了,但只是对于需要输入变量名和问号的方式,没有这些是否可以做到?
    猜你喜欢
    • 2012-03-12
    • 2014-05-22
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多