Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Функция JS работает на одной странице проекта C# asp net core, но выдает ошибку 400 (Bad R / 2 сообщений из 2, страница 1 из 1
29.06.2021, 07:20
    #40080642
Vlad__i__mir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция JS работает на одной странице проекта C# asp net core, но выдает ошибку 400 (Bad R
Здравствуйте!

Есть 2 .cshtml страницы. Одна для добавления объекта - Create.cshtml:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
@model voteCollector.Models.Friend

@{
    ViewData["Title"] = "Create";
}
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf
@functions {
    public string GetAntiXsrfRequestToken()
    {
        return Xsrf.GetAndStoreTokens(Context).RequestToken;
    }
}

<hr />
<div class="row">
    <input type="hidden" id="RequestVerificationToken"
           name="RequestVerificationToken" value="@GetAntiXsrfRequestToken()">
    <div class="col-md-4">
        <form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
           <div class="form-row">
                <div class="form-group col-md-6">
                    <label asp-for="CityId" class="control-label"></label>
                    <select id="CityId" asp-for="CityId" class="form-control" asp-items="ViewBag.CityId"></select>
                </div>
                <div class="form-group col-md-6">
                    <label asp-for="StreetId" class="control-label"></label>
                    <select id="StreetId" asp-for="StreetId" class="form-control" asp-items="ViewBag.StreetId"></select>
                </div>
                <div id="divHouse" class="form-group col-md-6">
                    <label asp-for="HouseId" class="control-label"></label>
                    <select id="HouseId" asp-for="HouseId" class="form-control" asp-items="ViewBag.HouseId" style="width:100%"></select>
                </div>
<div class="form-row">
                <div class="form-group col-md-6">
                    <input type="submit" value="Добавить" class="btn btn-primary btn-block" />
                </div>
                <div class="form-group col-md-6">
                    <a asp-action="Index" class="btn btn-secondary btn-block"><i class="fa fa-table"></i>Вернуться к списку</a>
                </div>
            </div>
        </form>
    </div>
</div>

<environment include="Development">
    <script src="~/lib/jquery/dist/jquery.min.js"></script>
</environment>

@section Scripts {

    <script type="text/javascript" src="~/js/JS_Create_Friend.js"></script>


    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}

    @{
        if (TempData["msg"] != null)
        {
            <script>
            alert('@TempData["msg"]')
            </script>
        }
    }
}



Другая для изменения объекта - Edit.cshtml:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
@model voteCollector.Models.Friend

@{
    ViewData["Title"] = "Edit";
}
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf
@functions {
    public string GetAntiXsrfRequestToken()
    {
        return Xsrf.GetAndStoreTokens(Context).RequestToken;
    }
}

<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Edit">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <input type="hidden" asp-for="IdFriend" />
            <div class="form-row">
                <div class="form-group col-md-6">
                    <label asp-for="CityId" class="control-label"></label>
                    <select id="CityId" asp-for="CityId" class="form-control" asp-items="ViewBag.CityId"></select>
                    <span asp-validation-for="CityId" class="text-danger"></span>
                </div>
                <div class="form-group col-md-6">
                    <label asp-for="StreetId" class="control-label"></label>
                    <select id="StreetId" asp-for="StreetId" class="form-control" asp-items="ViewBag.StreetId"></select>
                    <span asp-validation-for="StreetId" class="text-danger"></span>
                </div>
                
                <div class="form-group col-md-6">
                    <label asp-for="HouseId" class="control-label"></label>
                    <select id="HouseId" asp-for="HouseId" class="form-control" asp-items="ViewBag.HouseId"></select>
                    <span asp-validation-for="HouseId" class="text-danger"></span>
                </div>                                       
            </div>                             

            <div class="form-row">
                <div class="form-group col-md-6">
                    <input type="submit" value="Сохранить" class="btn btn-primary btn-block" />
                </div>
                <div class="form-group col-md-6">
                    <a asp-action="Index" class="btn btn-secondary btn-block"><i class="fa fa-table"></i>Вернуться к списку</a>
                </div>
            </div>
        </form>
    </div>
</div>

@section Scripts {

    <script type="text/javascript" src="~/js/JS_Create_Friend.js"></script>
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}



В них подключаю один и тот же файл со скриптом:
Код: javascript
1.
<script type="text/javascript" src="~/js/JS_Create_Friend.js"></script>



Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
//Автоматич установка даты голосования
function setDate(sourseidObj, idObject) {
    chbox = document.getElementById(sourseidObj);
    if (chbox.checked) {
        var today = new Date();
        var dd = String(today.getDate()).padStart(2, '0');
        var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
        var yyyy = today.getFullYear();
        today = yyyy + '-' + mm + '-' + dd;
        document.getElementById(idObject).value = today;
    }
    else {
        document.getElementById(idObject).value = null;
    }
}

// Обновление списка улиц после выбора города

$(function () {
    $("#CityId").change(function () {
        var formData = { 'CityId': Number.parseInt($('#CityId').val()), 'Name': $('#CityId>option:selected').text() };
        $.ajax({
            url: "http://localhost:18246/api/API/searchStreets",
            headers:
            {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
                'RequestVerificationToken': $('#RequestVerificationToken').val()
            },
            type: 'POST',
            dataType: "json",
            data: JSON.stringify(formData),
            success: function (data) {

                dataFilling(data, 'idStreet', 'name', '#StreetId', '<option/>');
            },
            error: function (result, status, er) {
                alert("error: " + result + " status: " + status + " er:" + er);
            }
        });
    });
});



Функция setDate() нормально отрабатывает на обеих страницах, а вторая функция, ajax-функция нормально отрабатывает на страницы добавления (Create.cshtml), а на страницы правки (Edit.cshtml) выдает ошибку:
авторjquery.min.js:2 POST http://localhost:18246/api/API/searchStreets 400 (Bad Request)
Контроллер:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
[Route("api/[controller]")]
    [ApiController]
    [Produces("application/json")]
    public class APIController : ControllerBase
    {
        private readonly VoterCollectorContext _context;

        public APIController(VoterCollectorContext context)
        {
            _context = context;
        }


        [HttpPost("searchStreets")]
        [ValidateAntiForgeryToken]
        public IActionResult SearchStreets(CityDTO citySelected)
        {
            List<Street> streets =  _context.Street.Where(s => s.CityId == citySelected.CityId).ToList<Street>();
            
            if (streets.Any())
            {
                List<StreetDTO> streetsDTO = streets.Select(s => new StreetDTO { IdStreet = s.IdStreet, Name = s.Name }).ToList();
                return Ok(streetsDTO);                
            }
            return NoContent();
        }

        [HttpPost("searchHouse")]
        [ValidateAntiForgeryToken]
        public IActionResult SearchHouse(StreetDTO streetSelected)
        {
            List<House> houses = _context.House.Where(h => h.StreetId == streetSelected.IdStreet).ToList<House>();

            if (houses.Any())
            {
                List<HouseDTO> housesDTO = houses.Select(h => new HouseDTO { IdHouse = h.IdHouse, Name = h.Name }).ToList();
                return Ok(housesDTO);
            }
            return NoContent();
        }
    }



Почему на 2-ой страницы функция выдает ошибку запроса? Как можно исправить?
...
Рейтинг: 0 / 0
29.06.2021, 14:49
    #40080715
Vlad__i__mir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция JS работает на одной странице проекта C# asp net core, но выдает ошибку 400 (Bad R
Не 2-ой стр не было указано поле для токена:
Код: html
1.
2.
<input type="hidden" id="RequestVerificationToken"
           name="RequestVerificationToken" value="@GetAntiXsrfRequestToken()">
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Функция JS работает на одной странице проекта C# asp net core, но выдает ошибку 400 (Bad R / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]