无论我做什么,下面的按钮总是调用控制器的OnGetAsync()
方法,而不是所需的SetEditMode()
控制器/型号代码:
public class DetailsModel : PageModelBase
{
private readonly ICommunicationService communicationService;
public DetailsModel(ICommunicationService communicationService)
{
this.communicationService = communicationService;
}
public bool IsEditMode { get; set; } = false;
public EmployeeProfileData EmployeeProfileData { get; set; }
public async Task OnGetAsync()
{
this.EmployeeProfileData = await this.communicationService.GetEmployeeProfileData();
}
[HttpGet(nameof(SetEditMode))]
public IActionResult SetEditMode()
{
this.IsEditMode = true;
return Page();
}
}
查看代码:
@page
@using Common.Resources
@model PersonalProfile.DetailsModel
@{
ViewData["Title"] = TextResources.Profile;
}
<div class="row no-padding col-md-12">
<h3 class="pl-3 mb-3 text-color-medium float-left">@TextResources.EmployeeProfileData</h3>
@if (!Model.IsEditMode)
{
<div class="d-flex justify-content-start mb-2 mx-2">
<a asp-action="SetEditMode" method="get" class="btn btn-light-green">Edit</a>
</div>
}
</div>
答案 0 :(得分:2)
您正在使用Razor Page,而不是Controller。在您的示例中,您将Razor Pages路由与Controllers所使用的基于属性的路由方法相混淆。
为此,您可以使用Named Handler Method,它遵循On[Verb][Handler]
的约定。这是一个示例:
public IActionResult OnGetSetEditMode()
{
this.IsEditMode = true;
return Page();
}
请注意,我还删除了上面的HttpGet
属性。
进行此更改后,需要更新.cshtml文件以使用新的处理程序:
<a asp-page-handler="SetEditMode" class="btn btn-light-green">Edit</a>
请注意,在这种情况下,我还删除了method
属性,因为a
元素在设计上触发了GET
个请求。