【问题标题】:Action Routing: Application gets confused between the GET and POST methods动作路由:应用程序混淆了 GET 和 POST 方法
【发布时间】:2017-11-24 11:35:16
【问题描述】:

上下文:

此时使用 GET 方法构造的视图有两个参数:iddate。在这个视图中,有一个表单通过 POST 方法使用参数id 将信息发送回控制器

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 操作而不是 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 操作?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      相关资源
      最近更新 更多