【问题标题】:Trouble with global.asax routingglobal.asax 路由问题
【发布时间】:2013-08-05 13:43:28
【问题描述】:

我的网络应用中有一些链接如下所示:

localhost:12345/?something=1
localhost:12345/?something=2
localhost:12345/?something=3
localhost:12345/?something=4

最后的每个数字都是一个 ID,我需要将其传递给我的控制器以显示与其相关的信息。

我知道我需要在我的global.asax 页面中创建一个新的routes.MapRoute,但我不太确定如何去做。我试过这个:

routes.MapRoute(
    "Id", // Route name
    "{controller}/{action}/{*Id}", // URL with parameters
    new { controller = "Home", action = "Id", Id = "" } // Parameter defaults
);

---编辑---

我只有通过执行以下操作才能成功让每个人都喜欢展示:

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

这确实有效,但是,这只适用于一个 id(特别是 1)。我不太确定该怎么做,但我需要我需要:

localhost:12345/?something=1

显示 id 1 的信息,

localhost:12345/?something=2

显示 id 2 的信息,

localhost:12345/?something=3

显示 id 3 的信息。

我将有数百个 ID,因此硬编码不是一个方便的选择。到目前为止,我没有运气。任何帮助将非常感激!谢谢!

【问题讨论】:

    标签: asp.net-mvc-3 asp.net-mvc-routing global-asax


    【解决方案1】:
            routes.MapRouteWithName(
                "RootName",
                "{id}",
                new { controller = "Home", action = "Index", id = 1 });
    

    这将产生像这样的链接 localhost/1 如果你想要这种链接 localhost/?id= 1 然后:

            routes.MapRouteWithName(
                "RootName",
                String.Empty,
                new { controller = "Home", action = "Index"});
    
    
    public ActionResult Index(int id)
        {
            //do something with id, make query to database whatever
    
            // u usually have model class so you would fill model with your data
            var model = new YourModel();
            //...
            return View("Index", model);
        }
    

    【讨论】:

    • 感谢您的回复。它似乎是半工作。您的代码的唯一问题是您只能将它用于第一个 id。你知道我可以通过任何一种方式吗?将有数百个 id,每次都必须编写它会很痛苦。
    • 嗯,你想让一个 ID 成为一个动作,嗯,你为什么不使用一个动作并将 id 作为参数传递给那个动作。
    • 这就是这条路线正在做的事情。
    • 由于我以前从未真正使用过路由或使用 global.asax 页面,所以我不太明白..
    • 抱歉不在 stackoverflow 附近,能否请您添加您的控制器代码,以便我了解您要做什么。一般来说,这在我看来就像您试图将 id 作为参数传递,参数被传递给控制器​​中的操作方法。该操作方法采用该参数并执行您需要执行的操作。如果是这样的话,不仅仅是创建一个控制器操作方法,用该名称替换“索引”,您可以在您的操作方法中处理该参数。我已经编辑了代码以向您展示该操作的外观。
    【解决方案2】:

    如果您在 HomeController 中有以下操作:

    public ActionResult SomeAction(int Id)
        {
            return View()
        }
    

    您可以使用以下任何一种路线:

    //* For Id = 3 this will return path "Home/SomeAction/3" 
    routes.MapRoute(
                    name: "First",
                    url: "{controller}/{action}/{Id}",
                    defaults: new { controller = "Home", action = "SomeAction", Id= UrlParameter.Optional}
                );
    
    
    //* For Id = 3 this will return path "SomeAction/3" 
    routes.MapRoute(
                    name: "First",
                    url: "{action}/{Id}",
                    defaults: new { controller = "Home", action = "SomeAction", Id= UrlParameter.Optional}
                );
    
    //* For Id = 3 this will return path "Home/SomeAction(3)" 
    routes.MapRoute(
                    name: "First",
                    url: "{controller}/{action}({Id})",
                    defaults: new { controller = "Home", action = "SomeAction", Id= UrlParameter.Optional}
                );
    
    
    //* For Id = 3 this will return path "LadyGaga/SomeAction/3" 
    routes.MapRoute(
                    name: "First",
                    url: "LadyGaga/{action}/{Id}",
                    defaults: new { controller = "Home", action = "SomeAction", Id= UrlParameter.Optional}
                );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 2016-11-09
      相关资源
      最近更新 更多