Вызов метода контроллеров со страницы с asp-действием - PullRequest
0 голосов
/ 07 февраля 2019

Что бы я ни делал, кнопка ниже всегда вызывает 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>

1 Ответ

0 голосов
/ 07 февраля 2019

Вы работаете со страницей Razor, а не с контроллером.В вашем примере вы путаете маршрутизацию Razor Pages с подходом маршрутизации на основе атрибутов, используемым с контроллерами.

Чтобы это работало, вы можете использовать Метод именованного обработчика , который следует засоглашение 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 запросов по проекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...