2
我在ASP.NET Core 1.0.0上遇到了路由和表单的一个小问题。我有下列行为:在路由中带有id的ASP.NET核心表格
[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)
,或者有明确移除ID形式taghelper:
<form asp-action="Delete" asp-controller="AdminPosts" asp-area="Admin" asp-route-id="" method="post" role="form">
什么可能我是错在这里干什么?为什么它不能正确解析路线?
我不会推荐使用HTTP GET来删除命令... –
@JeremyHolovacs删除的是POST ... –
嗯,看起来像。对不起,我认为这是网络api REST调用 –