从 ASP.NET 核心视图代码中获取 JSON
Get a JSON from an ASP.NET Core view code
在 ASP.NET Core 2.2 应用程序中,我有一个用户页面,我需要在该页面上获得密码重置 link
下面是我的代码,似乎不起作用
EditUser.cshtml
代码
<script>
var getUserLink = function () {
var actionLink = "@Url.Action("ResetPassword", user)";
$.getJSON(actionLink, function (data) {
$("#resetLink").html(data["resetLink"]);
});
};
</script>
EditUser.chtml.cs
代码
public class EditUserModel : PageModel
{
/// ...
public async Task<JsonResult> ResetPassword(ApplicationUserModel user)
{
var appUser = new ApplicationUser
{
UserName = user.Email,
Email = user.Email,
DisplayName = user.Name,
OrganizationID = user.OrganizationID,
EmailConfirmed = true
};
var code = await userManager.GeneratePasswordResetTokenAsync(appUser);
var callbackUrl = Url.Page("/Account/ResetPassword",
pageHandler: null,
values: new { code },
protocol: Request.Scheme);
return new JsonResult(new { resetLink = callbackUrl });
}
}
我的意思是,当我从cshtml
页面点击"Obtain"按钮时,会询问JSON,但是代码没有进入ResetPasword
函数在 cshtml.cs
文件中。问题出在哪里?
在 razor 页面上,您使用 "Handlers" 调用对您当前所在的 razor 页面的请求。
因此,如果您想发出获取请求,则必须重命名您的方法以遵循特定模式:
public class EditUserModel : PageModel
{
public async Task<JsonResult> OnGetResetPasswordAsync(ApplicationUserModel user)
{
/* ...*/
}
}
你的javascript现在变成了:
var getUserLink = function () {
var actionLink = "./?handler=ResetPassword";
$.getJSON(actionLink, function (data) {
$("#resetLink").html(data["resetLink"]);
});
};
类似于此:如果你想发出一个 POST 请求,你需要命名你的处理程序方法
OnPostFoo
或 OnPostFooAsync
和类似的每个剩余的 HttpVerbs
如果你想发出 POST 请求,你必须做更多的提升。在这里阅读:https://www.thereformedprogrammer.net/asp-net-core-razor-pages-how-to-implement-ajax-requests/
在 ASP.NET Core 2.2 应用程序中,我有一个用户页面,我需要在该页面上获得密码重置 link
下面是我的代码,似乎不起作用
EditUser.cshtml
代码
<script>
var getUserLink = function () {
var actionLink = "@Url.Action("ResetPassword", user)";
$.getJSON(actionLink, function (data) {
$("#resetLink").html(data["resetLink"]);
});
};
</script>
EditUser.chtml.cs
代码
public class EditUserModel : PageModel
{
/// ...
public async Task<JsonResult> ResetPassword(ApplicationUserModel user)
{
var appUser = new ApplicationUser
{
UserName = user.Email,
Email = user.Email,
DisplayName = user.Name,
OrganizationID = user.OrganizationID,
EmailConfirmed = true
};
var code = await userManager.GeneratePasswordResetTokenAsync(appUser);
var callbackUrl = Url.Page("/Account/ResetPassword",
pageHandler: null,
values: new { code },
protocol: Request.Scheme);
return new JsonResult(new { resetLink = callbackUrl });
}
}
我的意思是,当我从cshtml
页面点击"Obtain"按钮时,会询问JSON,但是代码没有进入ResetPasword
函数在 cshtml.cs
文件中。问题出在哪里?
在 razor 页面上,您使用 "Handlers" 调用对您当前所在的 razor 页面的请求。
因此,如果您想发出获取请求,则必须重命名您的方法以遵循特定模式:
public class EditUserModel : PageModel
{
public async Task<JsonResult> OnGetResetPasswordAsync(ApplicationUserModel user)
{
/* ...*/
}
}
你的javascript现在变成了:
var getUserLink = function () {
var actionLink = "./?handler=ResetPassword";
$.getJSON(actionLink, function (data) {
$("#resetLink").html(data["resetLink"]);
});
};
类似于此:如果你想发出一个 POST 请求,你需要命名你的处理程序方法
OnPostFoo
或 OnPostFooAsync
和类似的每个剩余的 HttpVerbs
如果你想发出 POST 请求,你必须做更多的提升。在这里阅读:https://www.thereformedprogrammer.net/asp-net-core-razor-pages-how-to-implement-ajax-requests/