ASP.NET CORE RAZOR PAGES - Метод перегрузки - PullRequest
0 голосов
/ 09 ноября 2018

Я застрял с двумя проблемами в ASP.NET CORE RAZOR PAGES и не нашел никакого контента по этому поводу.

Проблема 1: Я пытался перегрузить компонент своей страницы, но, похоже, это невозможно, чтобы заставить его работать, я использую параметр nullable в моем методе, но я не знаю, если это лучший способ сделать это, есть лучший способ?

Что у меня работает:

// Для нового элемента или редактирования элемента

public IActionResult OnGetModal (int? Squid)

Что я хотел:

// Для нового элемента

публичный IActionResult OnGetModal ()

// Для режима редактирования

публичный IActionResult OnGetModal (int squid)

ПРИМЕЧАНИЕ: Если вместо этого уникального метода с параметром обнуляемого типа я использую два метода 1 без параметра и другой метод с этим параметром int, я получаю сообщение об ошибке, поскольку у меня несколько обработчиков.


Проблема 2: У меня есть 2 метода с одинаковым именем параметра, и я получаю сообщение об ошибке при попытке обратиться к этому обработчику.

Метод 1:

public IActionResult OnGetModal (int? Squid)

Метод 2:

public bool OnPostActivateDeactivate (int squid, bool isActive)

Здесь я пытаюсь получить доступ к методу Modal:

URL:? Handler = modal & squid = 1001

Ошибка: InvalidOperationException: неподдерживаемый метод-обработчик, возвращающий тип 'System.Boolean'.

Как мне решить эти проблемы или как лучше всего это сделать?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Для Задача 1 , это по замыслу, и это управляется IPageApplicationModelProvider и IPageHandlerMethodSelector, он отличает ручку httpMethod и handlerName. Вы можете реализовать свой собственный IPageHandlerMethodSelector с помощью кода ниже:

        //Setp 3: remove candidates with non-matching parameters
        for (var i = candidates.Count - 1; i >= 0; i--)
        {
            var handler = candidates[i];
            var request = context.HttpContext.Request.Query.Count - 1;
            if (handler.Parameters.Count != request)
            {
                candidates.RemoveAt(i);
            }
        }

Вы можете зарегистрировать свой собственный IPageHandlerMethodSelector, как показано ниже:

services.AddSingleton<IPageHandlerMethodSelector, CustomDefaultPageHandlerMethodSelector>();

Здесь завершено CustomDefaultPageHandlerMethodSelector .

Для Задача 2: , вам нужно пройти RequestVerificationToken, как показано ниже:

    <script type="text/javascript">
    $(document).ready(function () {
        var postSubmit = $.ajax({
            type: "POST",
            headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
            url: "testmodel?handler=ActivateDeactivate&squid=1&isactive=true",
            //data: JSON.stringify({ ... }),
            contentType: "application/json"
        }).done(function (response) {
            //...
        });
    });
</script>
0 голосов
/ 09 ноября 2018

Во-первых, вы не можете иметь несколько обработчиков с одним и тем же именем, которые различаются только параметрами на одной странице. Вам нужно выбрать разные имена.

Во-вторых, единственными допустимыми типами возврата для методов-обработчиков являются IActionResult, void, Task и Task<IActionResult>. Если вы хотите вернуть значение «true» из обработчика, верните его в виде строки в ContentResult или JsonResult.

...