Asp.net core 如何从同一页面中的ajax调用指向razor页面的代码隐藏文件中的函数?
我不断得到404。该文件位于Asp.net core 如何从同一页面中的ajax调用指向razor页面的代码隐藏文件中的函数?,asp.net-core,Asp.net Core,我不断得到404。该文件位于Admin/UploadConfirmation.cshtml。URL是localhost:444/Admin/UploadConfirmation。该函数称为CopyData 但是当我试图对它进行ajax调用时,它只是404 $.ajax({ type: "POST", url: "/Admin/UploadConfirmation/CopyData" 如何从cshtml文件向其自己的
Admin/UploadConfirmation.cshtml
。URL是localhost:444/Admin/UploadConfirmation
。该函数称为CopyData
但是当我试图对它进行ajax调用时,它只是404
$.ajax({
type: "POST",
url: "/Admin/UploadConfirmation/CopyData"
如何从cshtml文件向其自己的cshtml.cs文件进行ajax调用
如何从cshtml文件向其自己的cshtml.cs进行ajax调用
档案
请参考以下步骤和示例代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages()
.AddRazorPagesOptions(options =>
{
options.Conventions.AddAreaPageRoute("Admin", "/Index", "Admin");
});
services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN"); //configure the antiforgery service to look for the X-CSRF-TOKEN header. To prevent the cross-site request forgery.
}
public class PersonModel
{
public string Name { get; set; }
public string DateTime { get; set; }
}
namespace RazorSample.Areas.Admin.Pages
{
public class IndexModel : PageModel
{
public void OnGet()
{
}
public IActionResult OnPostGetTime(string name)
{
PersonModel person = new PersonModel
{
Name = name,
DateTime = DateTime.Now.ToString()
};
return new JsonResult(person);
}
}
}
然后,在Index.cshtml页面中,使用以下代码显示并调用handle方法:
@page
@{
Layout = "~/Pages/Shared/_Layout.cshtml";
}
@model RazorSample.Areas.Admin.Pages.IndexModel
<h2>Admin Index Page</h2>
<div class="container">
@Html.AntiForgeryToken()
<input type="text" id="txtName" />
<input type="button" id="btnGet" value="Get Current Time" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
$("#btnGet").click(function () {
$.ajax({
type: "POST",
url: "/Admin/Index?handler=GetTime",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
data: { "name": $("#txtName").val() },
success: function (response) {
alert("Hello: " + response.name + " .\nCurrent Date and Time: " + response.dateTime);
},
failure: function (response) {
alert(response.responseText);
},
error: function (response) {
alert(response.responseText);
}
});
});
});
</script>
</div>
@page
@{
Layout=“~/Pages/Shared/_Layout.cshtml”;
}
@模型RazorSample.Areas.Admin.Pages.IndexModel
管理索引页
@Html.AntiForgeryToken()
$(函数(){
$(“#btnGet”)。单击(函数(){
$.ajax({
类型:“POST”,
url:“/Admin/Index?handler=GetTime”,
发送前:函数(xhr){
xhr.setRequestHeader(“XSRF-TOKEN”,
$('input:hidden[name=“\uu RequestVerificationToken”]”)val();
},
数据:{“name”:$(“#txtName”).val(),
成功:功能(响应){
警报(“你好:+response.name+”\n当前日期和时间:+response.dateTime);
},
故障:功能(响应){
警报(response.responseText);
},
错误:函数(响应){
警报(response.responseText);
}
});
});
});
[注意]在Razor页面模型中,处理程序方法名为OnPostGetTime,但在这里,当从Razor HTML页面调用时,它将被指定为GetTime
看起来您使用的是区域,而没有区域的常规路由配置(当然也没有属性路由)。您不能对razor页面使用属性路由。我不熟悉的领域。感谢您的详细回答,但这将不会与现有的应用程序集成。我最终只是创建了一个控制器。剃须刀页面是哑的。