【发布时间】:2020-12-08 02:53:15
【问题描述】:
我一直在从 asp.net mvc 在 asp.net core mvc 中重新创建我的项目。
当我以前删除一个 Tag 对象时,我会通过索引页面的 ActionLink 将Tag.Name 发送到 Delete Post 方法。
@Html.ActionLink("Delete", "Delete", new { id = item.TagId, name = item.Name })
然后在控制器中,在删除(发布)时,我会像这样访问Name:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(int id, string name)
{
}
虽然在 asp.net core 中 name 在 Post 方法中返回为 null (尽管在 Get 方法中正确返回)。
我可以在 Delete 的表单 Post 中通过 <input asp-for="Name" type="hidden" /> 检索 name,但我想知道为什么我不能像使用 asp.net 那样检索它?
以下观点仅供参考
- asp.net
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Name)
</dt>
<dd>
@Html.DisplayFor(model => model.Name)
</dd>
</dl>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-actions no-color">
<input type="submit" value="Delete" class="btn btn-default" /> |
@Html.ActionLink("Back to List", "Index")
</div>
}
- asp.net 核心
<dl class="row">
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Name)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Name)
</dd>
</dl>
<form asp-action="Delete">
<input type="submit" value="Delete" class="btn btn-danger" /> |
<a asp-action="Index">Back to List</a>
</form>
谢谢
【问题讨论】:
-
您误解了 HTTP 和 HTML 如何协同工作。
ActionLink呈现一个<a>元素只能发出GET请求。要发出POST请求,您需要一个<form method="post">元素。您是否仍然可以使用<button type="submit" form="formIdGoesHere">Click me</button>提交具有类似链接外观的表单,但您需要直接呈现该表单,而不是使用ActionLink。 -
@Dai 我明白了。然而,asp.net mvc 版本如何通过在 ActionLink 中声明它来在 Delete
POST方法中返回标签的名称?当我从 ActionLink 中删除它时,它是 DeletePOST方法中的Null。 -
发布请求可能会绑定查询参数。但是您的 .net 核心表单操作可能没有。
-
您是否在参数中尝试过 [FromQuery] ? public IActionResult Delete([FromQuery] name, [FromQuery] id ......
标签: c# asp.net asp.net-mvc asp.net-core asp.net-core-mvc