【问题标题】:How to handle two forms in one asp.net core view?如何在一个 asp.net 核心视图中处理两种形式?
【发布时间】:2020-11-13 08:18:56
【问题描述】:

我在一个视图中有两个表单,一个 ViewModel,每个人都包含两个提交按钮,每个人都有两个独立的操作。

问题
当我提交其中任何一个时,就会出现此错误

处理请求时发生未处理的异常。
AmbiguousMatchException:请求匹配多个端点。
匹配:

DAS.Controllers.DocumentsController.CreateIn (DAS)
DAS.Controllers.DocumentsController.CreateEx (DAS)

观点

// one ViewModel
@model VMCreateDoc

// First form to submit "CreateIn" action
<form asp-controller="Documents" asp-action="CreateIn" enctype="multipart/form-data">
 // bla bla bla
<input type="submit" class="btn btn-success" value="Save In">
</form>

// Second form to submit "CreateEx" action
<form asp-controller="Documents" asp-action="CreateEx" enctype="multipart/form-data">
 // bla bla bla
<input type="submit" class="btn btn-success" value="Save Ex">
</form>

动作

    // DocumentInternal Included in the same ViewModel VMCreateDoc
    [HttpPost("FileUpload")]
    public IActionResult CreateIn(DocumentInternal documentIn, List<IFormFile> files)
    {
       // bla bla bla
       return View();
    }

    // DocumentExternal Included in the same ViewModel VMCreateDoc
    [HttpPost("FileUpload")]
    public IActionResult CreateEx(DocumentExternal documentEx, List<IFormFile> files)
    {
       // bla bla bla
       return View();
    }         

视图模型

public class VMCreateDoc
{
    public DocumentExternal DocEx { get; set; }
    public DocumentInternal DocIn { get; set; }
}

似乎每个提交都提交了两种形式。于是,冲突就发生了。
你认为这个问题可以解决什么?

【问题讨论】:

  • [HttpPost("FileUpload")] 指定 CreateInCreateEx 应该作为一个名为 FileUpload 的操作出现吗?看起来 ASP.NET Core 仅在请求到来时才发现此错误,并且无法决定调用哪个方法
  • 我怀疑如果您检查 HTML 源代码,您会发现两个表单具有相同的 actionFileUpload
  • @PanagiotisKanavos 哇,没错。当我更改路线名称时,冲突已经消失。太感谢了。谢谢大家。

标签: asp.net-mvc asp.net-core tag-helpers


【解决方案1】:

感谢所有试图帮助我的人。非常感谢 Panagiotis Kanavos。
问题出在上述操作的注释上。
我所做的只是改变它,问题就解决了。

像这样

// DocumentInternal Included in the same ViewModel VMCreateDoc
[HttpPost("documentIn")]
public IActionResult CreateIn(DocumentInternal documentIn, List<IFormFile> files)
{
   // bla bla bla
   return View();
}

// DocumentExternal Included in the same ViewModel VMCreateDoc
[HttpPost("documentEx")]
public IActionResult CreateEx(DocumentExternal documentEx, List<IFormFile> files)
{
   // bla bla bla
   return View();
}  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    相关资源
    最近更新 更多