Не проходит POST запрос к функции mvc-контроллера, отправляемый JS функцией - ошибка 404
Необходимо обновить тело tbody таблицы не перезагружая страницу. Страница формируется mvc-контроллером. Для этого в mvc-контроллере, который формирует данную страницу прописал нужный метод, который принимает POST-запросы - GetPolingStationsByElectoralDistrict:
[Authorize(Roles = "admin")]
public class PollingStationsController : Controller
{
private readonly VoterCollectorContext _context;
public PollingStationsController(VoterCollectorContext context)
{
_context = context;
}
// GET: PollingStations
public async Task<IActionResult> Index()
{
var voterCollectorContext = _context.PollingStation.Include(s => s.Station).Include(p => p.City).Include(p => p.House).Include(p => p.MicroDistrict).Include(p => p.Street);
return View(await voterCollectorContext.ToListAsync());
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult GetPolingStationsByElectoralDistrict([FromBody] ElectoralDistrictDTO electoralDistrictDTO)
{
List<District> districts = _context.District.Where(d => d.ElectoralDistrictId == electoralDistrictDTO.IdElectoralDistrict).ToList();
List<int> selectStationsId = districts.Select(d => d.StationId ?? 0).ToList();
List<PollingStation> pollingStations = _context.PollingStation.Include(p => p.City).Include(p => p.Street).Include(p => p.House)
.Where(p => selectStationsId.Contains(p.StationId ?? 0)).ToList();
return PartialView(pollingStations);
}
}
Подключил файл <script type="text/javascript" src="~/js/JS_Index_PollingStations.js"></script> , написал в нем JS функцию, которая формирует и отправляет ajax-запрос на сервер:
$(function () {
$("#SelectElectoralDistrictId").change(function () {
var formData = {'IdElectoralDistrict': Number.parseInt($('#SelectElectoralDistrictId').val()), 'Name': $('#SelectElectoralDistrictId>option:selected').text() };
$.ajax({
type: 'POST',
url: '@Url.Action("GetPolingStationsByElectoralDistrict")/',
headers:
{
'Accept': 'application/json',
'Content-Type': 'application/json',
'RequestVerificationToken': $('#RequestVerificationToken').val()
},
dataType: "json",
data: JSON.stringify(formData),
success: function (data) {
$('#tableBodyPollingStation').replaceWith(data);
},
error: function (result, status, er) {
alert("error: " + result + " status: " + status + " er:" + er);
}
});
});
Но запрос до метода не доходит - выдает 404, и в ней странно отображает путь:
POST http://localhost:18246/@Url.Action(%22GetPolingStationsByElectoralDistrict%22) 404 (Not Found)
Для обновления tbody таблицы данными с сервера создал представление:
@model IEnumerable<voteCollector.Models.PollingStation>;
@{
ViewData["Title"] = "GetPolingStationsByElectoralDistrict";
}
<tbody id="tableBodyPollingStation">
@foreach (var item in Model)
{
<tr>
<td></td>
<td>
@Html.DisplayFor(modelItem => item.Station.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.City.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Street.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.House.Name)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.IdPollingStation">Править</a> |
<a asp-action="Delete" asp-route-id="@item.IdPollingStation">Удалить</a>
</td>
</tr>
}
</tbody>