【发布时间】:2016-11-19 03:59:25
【问题描述】:
我在 ASP.NET Core 1.0.0 上的路由和表单有一个小问题。我有以下操作:
[Route("delete/{id:int}")]
[HttpGet]
public async Task<IActionResult> Delete(int id)
{
Post post = await _postsRepository.GetPost(id);
return View(new DeletePostViewModel
{
PostId=post.Id,
Title=post.Title
});
}
[Route("delete"),HttpPost,ValidateAntiForgeryToken]
public async Task<IActionResult> Delete([FromForm]DeletePostViewModel vm,string option)
{
if (option == "Delete")
await _postsRepository.DeletePost(vm.PostId);
return RedirectToAction("Index");
}
在我看来,我有以下几点:
<form asp-action="Delete" asp-controller="AdminPosts" asp-area="Admin" method="post" role="form">
<div class="form-group">
<input type="hidden" asp-for="PostId"/>
<label asp-for="Title"></label>
<input type="text" asp-for="Title" class="form-control" readonly="readonly"/>
</div>
<p>
<input type="submit" name="option" value="Delete" class="btn btn-danger" />
<input type="submit" name="option" value="Cancel" class="btn btn-default" />
</p>
</form>
但它不能正确解析路由。我为表单发布获得的路线也有 id,因此它不能解析 id。我必须将 id 添加到表单方法中:
[Route("delete/{id:int}"),HttpPost,ValidateAntiForgeryToken]
public async Task<IActionResult> Delete(int id,[FromForm]DeletePostViewModel vm,string option)
或者我必须以 taghelper 的形式明确删除 id:
<form asp-action="Delete" asp-controller="AdminPosts" asp-area="Admin" asp-route-id="" method="post" role="form">
我在这里可能做错了什么?为什么不能正确解析路由?
【问题讨论】:
-
我不建议对删除命令使用 HTTP GET...
-
@JeremyHolovacs 执行删除操作的是 POST...
-
嗯,是的,看起来像。抱歉,我以为这是 Web api REST 调用
标签: c# asp.net-mvc routes asp.net-core