You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP MVC5嵌套视图目录下Url.Route链接生成问题求助

解决ASP.NET MVC5中嵌套视图结构的链接生成问题

这个问题我做项目时也碰到过,核心是你混淆了MVC路由规则和视图文件存放路径的关系——路由是映射到控制器的动作方法,而非直接对应视图文件的位置。下面给你几个实用的解决方案:

方案1:直接用Url.Action指定控制器和动作

这是最省心的方法,你的UserController里已经有Create动作方法,路由系统会自动匹配/User/Create路径。在视图里这么写:

<a href="@Url.Action("Create", "User")">跳转到用户创建页面</a>

这个写法会直接生成正确的/User/Create链接,完全不用管视图放在User/Create子文件夹里的细节。

方案2:自定义命名路由(适配复杂场景)

如果后续项目有特殊路由需求,可以在App_Start/RouteConfig.cs里添加一条命名路由:

routes.MapRoute(
    name: "UserCreateRoute",
    url: "User/Create",
    defaults: new { controller = "User", action = "Create" }
);

然后在视图里通过路由名称生成链接:

<a href="@Url.RouteUrl("UserCreateRoute")">跳转到用户创建页面</a>

这种方式的好处是,后续如果需要修改路由URL(比如改成/Users/New),只需要调整路由配置,不用修改所有视图里的链接。

关键避坑点

你之前可能踩坑的地方:别把视图文件的路径(比如Create/Create)当成action参数传给路由方法。比如下面这种写法是错误的:

<!-- 错误示例:不要这么写! -->
<a href="@Url.RouteUrl(new { controller = "User", action = "Create/Create" })">错误链接</a>

action参数对应的是控制器里的动作方法名称,你的动作方法叫Create,所以这里只需要传"Create"就行。

另外,你当前动作方法返回视图的写法return View("Create/Create");是正确的,MVC会自动从Views/User文件夹下查找指定路径的视图,完全没问题。

内容的提问来源于stack exchange,提问作者Ben Donnelly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:49:02