Я некоторое время боролся с этим вопросом, прочитал несколько статей вроде:
Razor Pages AJAX FORM
MSDN ASP. NET Core RESTfull Web API
И не понял правильно.
В моем текущем проекте у меня есть:
- Форма на мой взгляд:
<form method="delete" asp-route="ProductCatalogSingle">
<input hidden type="number" name="Id" value="@Model.Id" />
<input type="submit" class="btn btn-dark" value="Delete" />
</form>
Что должно отправить запрос на удаление в мое действие:
// Controller have [Route("product-catalog")] attribute
[HttpDelete("product", Name = "ProductCatalogSingle")]
public async Task<IActionResult> DeleteSingleItem(int id)
{
// business-logic part responsible for data managment
await logic.RemoveDataModelAsync(new ProductCatalog { Id = id });
return RedirectToRoute("ProductCatalogAll");
}
// other action with same route, but different method
[HttpGet("product", Name = "ProductCatalogSingle")]
public async Task<IActionResult> SingleItem(int id)
{...}
В настройках по умолчанию это не работает - вместо этого загружается Get action.
Итак, я попыталсякуча вещей:
- Использование Fetch API, с
"/product-catalog/product"
и "@Url.Link("ProductCatalogSingle", null)"
вместо url
:
@section scripts{
<script>
document.forms[0].onsubmit = () => {
let formData = new FormData(document.forms[0]);
fetch(url, {
method: "DELETE",
body: new URLSearchParams(formData)
})
.then(() => {
alert('Deleted using Fetch');
});
return true;
};
</script>
Я получаю уведомление о предупреждении, нозапрос не отправлен.
Использование AJAX без бостуктивности:
@section scripts{
<script src="~/lib/jquery-ajax-unobtrusive/jquery.unobtrusive-ajax.js"></script>
}
<form method="delete" asp-route="ProductCatalogSingle" data-ajax="true" data-ajax-method="delete">
<input hidden type="number" name="productId" value="@item.ProductId" />
<input type="submit" class="btn btn-dark" value="Delete" />
</form>
Обычный JQuery AJAX
@section scripts{
<script>
$(function () {
$('#submit').on('click', function (evt) {
evt.preventDefault();
$.ajax({
type: "DELETE",
url: '/product-catalog/product?id=4001'
});
});
});
</script>
Изменение переменных IIS Express Server, например
Часто задаваемые вопросы IIS Express Состояния
<add name="ExtensionlessUrl-Integrated-4.0" ... verb="GET,HEAD,POST,DEBUG,PUT,DELETE"
Ничего из этого не сработало.