<form asp-action="Delete">
<input type="hidden" asp-for="ID" />
<input type="submit" value="Delete" class="btn btn-default" /> |
<a asp-action="Index">Back to List</a>
</form>
以上调用的方式寻找的是 控制器的 delete(post) 方法,而且用查看脚本会看到html会自动补全为post
而下面:
<a asp-action="Delete" asp-route-id="@item.ID">Delete</a>
以上调用的方式寻找的是 控制器的 delete(get) 方法
mvc是如何决定的 同样都是 asp-action="Delete",都没指名method?
以上是在学习.net core中遇到的疑问,网址:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mvc-app/details?view=aspnetcore-2.1
从 asp.net core mvc 的源代码中可以找到线索,对于asp-action
对应的实现代码是FormTagHelper.cs,在其Process()
方法中调用Generator.GeneratePageForm()
方法时给method
参数传的值是null,对应的实现DefaultHtmlGenerator.cs的GenerateFormCore
方法中有下面的代码:
if (string.IsNullOrEmpty(method))
{
// Occurs only when called from a tag helper.
method = "post";
}
感谢,我也去看看源码了