Ich bin relativ neu im Umgang mit .NET Core und ASP.NET Core MVC, da ich zuvor mit .NET 4 vertraut war. x und ASP.NET MVC 5, also haben Sie bitte Geduld, wenn ich etwas Offensichtliches frage; Ich konnte bei der Suche keine Antwort finden.
Verwendete Inhalte:
- .NET 8
ASP.NET Core MVC - jQuery
Code: Select all
[Area("SomeArea")]
public class SomeNameController : Controller
{
public SomeNameController(..injected stuff...) { }
[HttpGet]
public PartialViewResult AddDialog()
{
// ...
}
[HttpPost]
public async Task AddDialog(MyDialogModel dialogModel)
{
// ...
}
[HttpDelete]
[Route("DoSomeDeletion/{uniqueIdentifier}")]
public async Task DoSomeDeletion(int uniqueIdentifier)
{
// ...
return Json(result);
}
}
Code: Select all
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapBlazorHub();
endpoints.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=index}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=index}/{action=Index}/{id?}");
endpoints.MapFallbackToPage("/_Host");
});
Code: Select all
$("#MyGrid").on('click', '.js-delete-btn', function (e) {
e.preventDefault();
var url = this.href,
data = $("#GridForm").serializeObject();
$.ajax({
method: "DELETE",
url: url,
data: data
})
.done(function (jqXHR, textStatus) {
toastr.success("Yay! Deleted successfully", null, {
timeout: 5000,
onHidden: function () { window.location.reload(); }
});
})
.fail(function (jqXHR, textStatus, errorThrown) {
toastr.error("Uh-oh something went wrong", null, { timeout: 5000 });
});
});
Code: Select all
/SomeArea/SomeName/DoSomeDeletion/356
< strong>Problem
Wenn ich einen Haltepunkt in der Aktionsmethode DoSomeDeletion setze, wird dieser nie erreicht. Wenn ich jedoch das Attribut „Route“ entferne, wird es getroffen.
Was ich versucht habe
- Ich habe versucht, [HttpPost] anstelle von [HttpDelete] zu verwenden
- Für beide HttpDelete und HttpPost habe ich die Überladung verwendet, mit der Sie angeben können eine Routenvorlage, die dem Route-Attribut entspricht
- Wenn ich die URL so ändere, dass die ID eine Abfragezeichenfolge ist, z. B. ?uniqueIdentifier=365, dann wird die Aktion ausgeführt und der Wert wird an den Aktionsparameter gebunden.
- Entfernen des Routenattributs, sodass die Aktion ausgeführt wird. Ich sehe, dass Request.RouteValues einen {id} Wert, der auf den Wert der von mir erstellten URL gesetzt ist DELETE AJAX-Aufruf an.
Frage
Ich habe keine Attribute für verwendet Routing vorher, also übersehe ich vielleicht etwas, aber in ASP.NET MVC 5 auf .NET 4.8 hatte ich nie solche Probleme, ich könnte einen oder mehrere Routenwerte von der URL stammen lassen und so heißen, wie ich wollte.< /p>
Was ist los? Warum kann ich keine Routenwertnamen verwenden, die ich verwenden möchte?