操作路由:应用程序在GET和POST方法之间混淆

时间:2017-11-24 01:50:07

标签: c# post asp.net-core-mvc

上下文

使用GET方法构建的视图此时需要两个参数:iddate。在此视图中,有一个表单使用参数id

通过POST方法将信息发送回Controller

GET方法

    [HttpGet]
    public async Task<IActionResult> DetailsAdmin(int? id, [ModelBinder(typeof(PModelBinder))]DateTime? date)
    {
       {...}
    }

POST方法

    [HttpPost, ActionName("DetailsAdmin")]
    [ValidateAntiForgeryToken]
    [Route("HechosLiquidadors/DetailsAdmin/{id}")]
    public async Task<IActionResult> DetailsAdmin(int? id)
    {
       {...}
    }

问题:

当View中的表单将信息发送到Controller时,它将转到GET Action而不是POST操作。

表单:

<form id="@(String.Format("{0}{1}","form",Model[i].HechosID))" 
asp-action="DetailsAdmin" method="post" asp-route-id="@Model[i].HechosID" ></form>

我尝试过使用自定义路由到POST操作方法,但没有运气。如何更正此问题,以便表单正确指向POST操作?

1 个答案:

答案 0 :(得分:0)

在两个动作方法中,所有参数都是可选的。因此Mvc无法选择“最佳候选人”执行方法。 如下所示更改第一个操作并检查ID不是0:

[HttpGet]
public async Task<IActionResult> DetailsAdmin(int id = 0, [ModelBinder(typeof(PModelBinder))]DateTime? date)
{
    if (id != 0)
    {

    }
    {...}
}