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
相关产品推荐
相关产品推荐

