Здравствуйте!
Есть 2 .cshtml страницы. Одна для добавления объекта - Create.cshtml:
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:
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");}
}
В них подключаю один и тот же файл со скриптом:
1.
<script type="text/javascript" src="~/js/JS_Create_Friend.js"></script>
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)
Контроллер:
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-ой страницы функция выдает ошибку запроса? Как можно исправить?