1)在 ~/Areas/区域名称/Views 目录下 新建 _ViewImports.cshtml 文件
2)路由配置信息 - app.UseMvc(routes =>
- {
- routes.MapRoute(
- name: "default",
- template: "{controller=Home}/{action=Index}/{id?}");
- // 区域路由
- routes.MapRoute(
- name: "areas",
- template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
- );
- });
复制代码
3)视图 - <form class="layui-form" asp-area="Admin" asp-controller="Blog" asp-action="CategoryAdd" data-ajax-success="onSuccess" data-ajax="true" data-ajax-method="POST"></form>
复制代码
4)TagHelper 根据路由匹配规则,解析得到的路径为 /Blog/CategoryAdd?area=Admin,
很明显,这不是正确的,路由规则匹配成了这个 routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}");
5)这时,我们得调整下路由的注册顺序,因为路由匹配是按顺序地成功匹配到的第一个,把 区域 的路由放到第一个 - app.UseMvc(routes =>
- {
- // 匹配所有的区域 需要在对应Controller 上添加区域属性 如:[Area("Admin")]
- // 把 Area的路由放在第一位,会保证 在 Areas 下的视图,使用 TagHelper 时候,
- // 使用 asp-area asp-controller asp-action 能正确的匹配上
- // 如果不把这个路由放在这里,当你的Areas下的视图的路径 和 非Areas 目录下的视图
- // asp-controller asp-action 一样时,会匹配第一个能合适的路由
- // 而这时,你在 Areas 下的视图,就没有匹配到正确的路径
- routes.MapRoute(
- name: "areas",
- template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
- );
- routes.MapRoute(
- name: "default",
- template: "{controller=Home}/{action=Index}/{id?}");
- });
复制代码
6)这样就得到了正确的路径
注:在路由配置正确的前提下,form 表单里,只写 asp-action 的时候,可以不用写 asp-are 和 asp-controller,框架代码默认会查到当前所在的 区域(Areas) 和 控制器(Controller) 下 对应的 Action
7)参考资料 来源:https://blog.csdn.net/qq1326702940/article/details/82799488 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |