【问题标题】:Edit URL in Asp.net MVC在 Asp.net MVC 中编辑 URL
【发布时间】:2018-01-24 20:32:01
【问题描述】:

我想在 url 中显示我的链接:

http://localhost:60000/Admin/myControlerName/myActionName/3/7/2

这是我的 routConfig:

这是我的控制器:

这是我的操作链接:

Mylink 在 url 中显示如下:

http://localhost:60000/Admin/myControlerName/myActionName/?id1=3&id2=7&id3=2

但我想这样展示:

http://localhost:60000/Admin/myControlerName/myActionName/3/7/2

我哪里错了? :(

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing


    【解决方案1】:

    这里有 2 个不同的问题。首先,在路由上设置 3 个可选参数是行不通的。只有最后一个(最右边的)参数可以是可选的。因此,您需要两条路由来启用 URL 中 0、1、2、3、4 或 5 段的所有组合。

    // This will match URLs 4 or 5 segments in length such as:
    //
    //   /Home/Index/2/3
    //   /Home/Index/2/3/4
    //
    routes.MapRoute(
        name: "4-5Segments",
        url: "{controller}/{action}/{id}/{id2}/{id3}",
        defaults: new { id3 = UrlParameter.Optional }
    );
    
    // This will match URLs 0, 1, 2, or 3 segments in length such as:
    //
    //   /
    //   /Home
    //   /Home/Index/
    //   /Home/Index/2
    //
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    

    其次,您的 ActionLink 不匹配,因为您已将路由值指定为 id1,但在您的路由中该值是 id。所以,你需要改变ActionLink如下。

    @Html.ActionLink("my text", "myActionName", "myControllerName", new { id = 3, id2 = 7, id3 = 2}, null)
    

    这假设您已正确设置控制器:

    public class myControllerNameController : Controller
    {
        //
        // GET: /myActionName/
    
        public ActionResult myActionName(int id = 0, int id2 = 0, int id3 = 0)
        {
            return View();
        }
    
    }
    

    请参阅working demo here

    请以文本形式提供代码以供将来参考。复制和编辑图像确实很难,因此您获得答案的可能性要小得多。

    【讨论】:

    • 要使其正常工作,您的控制器名称必须完全是 myControllerNameController。我在一个测试项目中设置了它,它按照我在此处指定的方式完美运行。
    • 已经是你说的我的控制器名称了。名字一定是这样的? name: "4-5Segments"
    • 该名称仅适用于您尝试按名称匹配路由(例如,通过RouteLink 而不是ActionLink。使用默认模板设置新项目并复制控制器,我的回答中的路线和ActionLink。确保它有效,然后尝试协调当前项目和新项目之间的差异,直到找到问题为止。很可能,您的解决方案中有另一条路线匹配5个段正在覆盖这条路线。注册的第一场比赛总是获胜。
    • 你可以发送你的测试项目吗:( saitenesbiyikci@gmail.com 谢谢
    • 我注意到我的新错误。我有一个名为“管理员”的区域。这个 url 现在成功了,但是当我点击 actionLink 时,将 requestQueryString 作为默认值。我的意思是我必须为此编辑网址:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多