.NetCore MVC项目,Razor Page链接标签帮助不生成问题解决方案
Posted Hello World,
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NetCore MVC项目,Razor Page链接标签帮助不生成问题解决方案相关的知识,希望对你有一定的参考价值。
问题描述
新建立的MVC项目,添加Razor Page后,类似于<a asp-action="edit">Edit</a>或者Url.Action("Edit")这样的标签,在渲染之后链接部分不会生成。
解决方案
经排查,在Startup.cs的Configure中,有对路由的配置,但是仅针对MVC的:
app.UseMvc(routes =>
{
//区域的路由定义,要放在前面,不然匹配不到,匹配会以参数形式出现在地址后面
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
但Razor Page并不会调用这个路由规则,在无法确定路由规则的情况下,生成的链接就是空白的。因此,要解决此问题,需要添加针对Razor Page的路由规则:
//使用带模型的Razor Page时需要配置
app.UseEndpoints(endpoints =>
{
//用于生成asp-action、asp-action等链接标签,没有配置此项则生成时空白
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
添加此段之后即可正常生成了。
但还有一个问题,MVC的页面都在Views开头的文件夹里,使用代码生成器生成的也是,而Razor Page则是放在以Pages开头的文件夹里,如果项目里混用了两种方式来开发,则文件分分布在不同的地方,管理起来就比较混乱了。
解决起来也很简单,在ConfigureServices里配置服务时指定Razor Page的位置即可:
services.AddRazorPages().WithRazorPagesAtContentRoot();
以上是关于.NetCore MVC项目,Razor Page链接标签帮助不生成问题解决方案的主要内容,如果未能解决你的问题,请参考以下文章
asp.net core mvc razor page css未在特定路由上加载
.NET Core - 为啥我应该使用视图组件而不是集成在 MVC 应用程序或 Razor 页面中的 Blazor 组件
如何使用 ASP.NET Core 同时制作 Razor Page 和 C# 代码框架?