gpt4 book ai didi

c# - MVC 5 路由问题 - 多个路由错误地针对同一 View

转载 作者:太空狗 更新时间:2023-10-29 21:54:05 25 4
gpt4 key购买 nike

我配置了多个路由,但出于某种原因,尽管规则针对不同的 Controller 和不同的 View ,但不同的链接正在路由到同一 View 。请看下面,我在下面包含了我的 RouteConfig 文件和示例链接:

RouteConfig.cs

using System.Web.Mvc;
using System.Web.Routing;

namespace WebApplication1
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
name: "Account",
url: "Account/{action}/{id}",
defaults: new { controller = "Account", id = UrlParameter.Optional }
);

routes.MapRoute(
name: "Member",
url: "Member/{action}/{id}",
defaults: new { controller = "Member", id = UrlParameter.Optional }
);

routes.MapRoute(
name: "Root",
url: "{action}/{id}",
defaults: new { controller = "Home", id = UrlParameter.Optional }
);

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

routes.MapRoute(
name: "Details",
url: "{controller}/{action}/{u}",
defaults: new
{
controller = "Member",
action = "Details",
u = UrlParameter.Optional
}
);

routes.MapRoute(
name: "Article",
url: "{Home}/{Article}/{id}/{articleName}",
defaults: new { controller = "Home", action = "Article" }
);

routes.MapRoute(
name: "Item",
url: "{News}/{Item}/{id}/{itemName}",
defaults: new { controller = "News", action = "Item" }
);
}
}
}

链接

http://localhost:11508/Home/Article/2/Participate
http://localhost:11508/News/Item/2/Second-Test

正如所见,链接和规则肯定是唯一的,但由于某种原因忽略了 Item 规则,它只是将 Id 2 传递给主页/文章 View 。

最佳答案

您不应在括号中包含 Controller /操作名称 - 只需按原样传递它们,以便匹配路径。您的最后两条路线应如下所示:

        routes.MapRoute(
name: "Article",
url: "Home/Article/{id}/{articleName}",
defaults: new { controller = "Home", action = "Article" }
);

routes.MapRoute(
name: "Item",
url: "News/Item/{id}/{itemName}",
defaults: new { controller = "News", action = "Item" }
);

此外,最好将此类特定路由放置在任何其他路由之前,而不是默认路由之后

更新

基本上它应该是单独的问题,但在这里回答更容易。

来自评论:

how I can get http://localhost:11508/Member/Details?u=testuser to be routed to http://localhost:11508/Member/Details/testuser instead of a showing parameter.

  1. 创建接受此参数的 Controller 操作,如下所示:

    public ActionResult Details(string u, ...)
    {
    var model = new ...
    ...
    return View(model);
    }
  2. 注册路由,接受u参数作为URL部分,像这个

        routes.MapRoute(
    name: "MyRoute",
    url: "Member/Details/{u}",
    defaults: new { controller = "Member", action = "Details", u = UrlParameter.Optional }
    );

    这里 {u} 实际上声明了参数名称,以及它应该如何在 URL 中使用(解析/呈现)。

  3. 像这样呈现 URL 的链接:

    <a href="@Url.Action("Details", "Member", new {u = "testuser"})">linktext</a>

在所有这些步骤中,u 是您将使用的参数名称。

关于c# - MVC 5 路由问题 - 多个路由错误地针对同一 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23737706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com