C# 如何使用partials来;获得;asp.net核心剃须刀页面中的内容?
我在C# 如何使用partials来;获得;asp.net核心剃须刀页面中的内容?,c#,asp.net-core,get,partials,C#,Asp.net Core,Get,Partials,我在Pages/Partials/ Search.cshtml: @模型搜索模型 搜寻 Search.chshtml.cs: 使用系统; 使用System.Collections.Generic; 使用System.ComponentModel.DataAnnotations; 使用System.Linq; 使用System.Threading.Tasks; 使用Microsoft.AspNetCore.Mvc; 使用Microsoft.AspNetCore.Mvc.RazorPages;
Pages/Partials/
Search.cshtml
:
@模型搜索模型
搜寻
Search.chshtml.cs
:
使用系统;
使用System.Collections.Generic;
使用System.ComponentModel.DataAnnotations;
使用System.Linq;
使用System.Threading.Tasks;
使用Microsoft.AspNetCore.Mvc;
使用Microsoft.AspNetCore.Mvc.RazorPages;
命名空间AdminPortal.Web.Pages.Partials
{
公共类搜索模型:PageModel
{
[BindProperty(SupportsGet=true)]
公共字符串搜索字符串{get;set;}
公共互联网
{
}
}
}
Home.cshtml.cs
:
@page”/Home
@使用AdminPortal.Web.Pages
@模型家庭模型
startup.cs
:
使用Microsoft.AspNetCore.Builder;
使用Microsoft.AspNetCore.Hosting;
使用Microsoft.Extensions.Configuration;
使用Microsoft.Extensions.DependencyInjection;
使用Microsoft.Extensions.Hosting;
使用Microsoft.EntityFrameworkCore;
名称空间AdminPortal.Web
{
公营创业
{
公共启动(IConfiguration配置)
{
配置=配置;
}
公共IConfiguration配置{get;}
//此方法由运行时调用。请使用此方法将服务添加到容器中。
public void配置服务(IServiceCollection服务)
{
services.AddRazorPages();
}
//此方法由运行时调用。请使用此方法配置HTTP请求管道。
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.UseExceptionHandler(“/Error”);
//默认的HSTS值为30天。您可能希望在生产场景中更改此值,请参阅https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(端点=>
{
endpoints.MapRazorPages();
});
}
}
}
但是,当我单击submit时,它不会调用
OnGet()
方法。我做错了什么?您需要手动添加操作
值,或者通过表单标记帮助器方法(如asp页面
)进行设置
<form method="get" action="/Search">
</form>
如果没有操作值,浏览器会将其发送到当前URL。如果您有一个带有表单的页面,并且它应该将其发送到相同的页面模型,比如GET(显示页面)和POST,send表单,那么这种方法很好用
但是,对于跨不同页面使用的部分URL,您需要通过设置正确的URL来指定页面
但是,当我单击submit时,它不会调用OnGet()方法。
我做错了什么
这是因为部分视图是razor视图,而不是razor页面。razor视图只是一个视图,它与控制器一起工作。您可以参考以下更详细的说明:
正确的方法是在主页中添加后端代码:
Home.cshtml.cs:
public class HomeModel : PageModel
{
[BindProperty(SupportsGet = true)]
public string SearchString { get; set; }
public void OnGet()
{
}
}
public class HomeModel : PageModel
{
[BindProperty(SupportsGet = true)]
public string SearchString { get; set; }
public void OnGet()
{
}
public void OnGetSearch()
{
//do your stuff...
}
}
Search.cshtml:
@model HomeModel
<body>
<form method="get">
//...
</form>
</body>
@model HomeModel
<body>
<form method="get" asp-page-handler="Search">
//...
</form>
</body>
Search.cshtml:
@model HomeModel
<body>
<form method="get">
//...
</form>
</body>
@model HomeModel
<body>
<form method="get" asp-page-handler="Search">
//...
</form>
</body>
@model HomeModel
//...
手动添加表单action:action=“/Partials/Search”
可能是一个解决方案。但实际上,如果您不指定该操作,它在我的项目中也能正常工作。我想您需要找到导致项目无法工作的原因。请共享您的Startup.cs。当您第一次呈现搜索页面时,请检查浏览器中的请求url是否为/Partials/Search
。您好@d4rk4ng31,您可以看到您在主页中添加了Partials/Search
,请求url应为/Home
。当您提交表单时,它将转到/Home
,这就是为什么您不使用search OnGet方法。在您的场景中,您必须指定以下形式的操作:action=“/Partials/search”
。您介意共享您的主页后端代码吗?您的主页位于哪里?在Pages文件夹中还是其他文件夹中?@Rena。我所要做的就是使用formaction
属性。正如我的第一条评论所说,手动添加formaction是一个解决方案。但你需要知道为什么会出现这样的错误。因为你第一次更改formaction时,你说它会给你404。404表示找不到页面。这就是为什么我昨天与你进行了大量咨询。嗯,但是为什么它不能与动作
属性一起工作呢?你是说asp动作?让我们来纠正一下:动作
那么它就工作了!