我的目录结构如下:
我建了一个 Razor 页面, 这个页面怎么请求他自己的PageModel 里面的 getString 方法呀??
后端:
前端:
困惑了好几天了,我知道 url是访问控制器的,但是这个 Razor页面 不是说自带后台嘛,那么怎么从前端去请求后端的方法。。
我的目录结构如下:
我建了一个 Razor 页面, 这个页面怎么请求他自己的PageModel 里面的 getString 方法呀??
后端:
前端:
困惑了好几天了,我知道 url是访问控制器的,但是这个 Razor页面 不是说自带后台嘛,那么怎么从前端去请求后端的方法。。
看起来你的项目里既使用了MVC控制器也使用了Razor Pages.如果你要在MVC项目里使用Razor Pages,首先你不能忘了加对Razor Pages路由的支持:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages(); //加这个
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//....
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages(); //加这个
});
}
其次,放在Views文件夹底下走的是默认MVC的路由,Razor Pages路由读取默认是在根目录的Pages文件夹底下的,建议你在你的项目的根目录创建一个Pages文件夹,也就是说跟Views还有Controllers文件夹同级别,然后再把你的Table文件夹所有文件包括Table文件夹本身都全部移到Pages文件夹底下(Pages/Table/myHome.cshtml
),记得别忘了看一下你的PageModel的namespace(namespace ProjectName.Pages.Table
)对不对。
还有个问题,Razor Pages由防伪造验证保护,你需要使用FormTagHelper 将防伪造令牌注入 HTML 窗体元素或者手动在你的页面添加@Html.AntiForgeryToken()
,然后你的ajax需要添加这个token。否则的话会报400的错误(你可以F12注意查看控制台错误信息)。具体你可以参照下面这个文档:
顺便提个建议,看起来你不太了解RazorPages的整体流程,建议你可以先看看文档: