使用asp-controller标记帮助器(https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-3.1#the-form-tag-helper)时,应该可以像这样指定要运行的控制器:
<form asp-controller="Demo" asp-action="Register" method="post">
很明显,这里的控制器是Demo。似乎这是通过URL https://localhost:44311/?action=onPost&controller=TodoItem
但是在我的情况下这不起作用,运行的控制器不是URL中的那个,而是连接到表单所在页面的那个。我该如何调试,如何查看出了什么问题?解决方案是什么,是否要加载某些服务来启用此行为?
答案 0 :(得分:1)
似乎这是使用URL从Web浏览器传输到后端的:https:// localhost:44311 /?action = onPost&controller = TodoItem
要解决上述问题,您可以尝试注册用于MVC控制器的服务,并为控制器操作添加端点,如下所示。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//...
//other configuration code here
//...
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
并确保您的剃刀项目包含从Microsoft.AspNetCore.Mvc.Controller
继承的控制器类,如下所示。
public class DemoController : Controller
{
//...
我的项目的文件夹结构
测试结果
答案 1 :(得分:0)
我知道了-标记助手var inpmarkup='<form:hidden path="bypassModel.selectedEntities" value='+'"'+ subEnt +'"'+'/>'; //create the inner html
在使用Razor Pages时不执行任何操作,而是应使用asp-controller
,如此处所述:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-3.1
要解决此问题,文档很有用,就像@Fei Han评论的那样,跟踪日志记录了路由中间件。因此,默认的asp-page
如下所示:
appsettings.json