Как отделить функции Javascript и Razer, которые работают вместе - PullRequest
0 голосов
/ 18 марта 2020

У меня есть приложение MVC. NET, которое использует комбинацию Razor и Ajax для выполнения различных вызовов Get и Post в моих представлениях. Я всегда пытался переместить Javascript в свои собственные файлы для лучшей поддержки и облегчения отладки, но методы, которые я использую для AntiForgery и некоторых других процессов, требуют сильной связи кода Razor и Ajax. Это затрудняет извлечение Javascript из файла .cs html, как обычно.

Вот пример:

....

@section Scripts
{
    <!--Razor Functions-->
    @functions{
        public string GetAntiForgeryTokens()
        {
            string cookieToken, formToken;
            AntiForgery.GetTokens(null, out cookieToken, out formToken);
            return cookieToken + ":" + formToken;
        }
    }

<script>
    // Javascript Functions
    function approveTracker(vm)
    {
        vm.save(vm).done(
            () =>
            {
                let tracker = ko.toJS(vm.tracker);

                $("#testModal").modal("hide");
                messageModal.setStatusAndShow("Approving", "<div class=\"spinner-border text-success\" role=\"status\"></div> Please wait...");

                $.ajax(
                    {
                        url: `/api/Tracker/Approve/${tracker.Id}`,
                        method: "POST",
                        headers: {
                            'RequestVerificationToken': '@GetAntiForgeryTokens()'
                        }
                    })
                    .done(() =>
                    {
                        document.location = `/Tracker/Edit/${tracker.TrackerId}`;
                    })
                    .fail(handleAjaxFailure);
            });
    }
</script>
}

Важным компонентом здесь является следующая часть вызова Ajax:

headers: {
    'RequestVerificationToken': '@GetAntiForgeryTokens()'
}

Можно ли в любом случае переместить скрипт в его собственный файл и при этом использовать функцию Razor для получения токенов ie:

@section Scripts
{
    <!--Razor Functions-->
    @functions{
        public string GetAntiForgeryTokens()
        {
            string cookieToken, formToken;
            AntiForgery.GetTokens(null, out cookieToken, out formToken);
            return cookieToken + ":" + formToken;
        }
    }

<script type="text/javascript" src="~/Scripts/Tracker/tracker-edit.js"></script>
}

Или я могу найти единственный способ найти чистый токен HTML / Javascript для доступа к токенам?

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