Asp.net core mvc MVC6 Taghelper将模型发布到控制器

Asp.net core mvc MVC6 Taghelper将模型发布到控制器,asp.net-core-mvc,tag-helpers,Asp.net Core Mvc,Tag Helpers,我正在开发一个MVC6应用程序,我想要一个按钮来将视图的模型发布到控制器。我使用taghelper具有以下标记- <a asp-route-area="MyArea" asp-controller="MyController" asp-action="MyAction">Save</a> 这是我的控制器动作- public IActionResult MyAction(MyObject mo) { return new EmptyRes

我正在开发一个MVC6应用程序,我想要一个按钮来将视图的模型发布到控制器。我使用taghelper具有以下标记-

<a asp-route-area="MyArea" asp-controller="MyController" asp-action="MyAction">Save</a>
这是我的控制器动作-

public IActionResult MyAction(MyObject mo)
{            
     return new EmptyResult();
}
当我单击按钮时,它被正确地路由到控制器,但模型对象为空。 如何让整个模型在单击按钮时发回控制器

仅供参考-我的目标是在表单上有多个按钮,根据单击的按钮将视图的模型发布到不同的mvc控制器


编辑-我不一定需要它发布到不同的控制器/操作。我可以让控制器决定如何处理,这似乎就是我所需要的。

我最终使用了概述的解决方案。
基本上,它的工作方式是创建两个具有不同名称的按钮,并使用按钮名称设置controller take参数。然后我只需检查这些参数,如果它们有值,我就以这种方式进行处理。

您可以在按钮上使用html表单操作

比如:

<form action="/submitNormal" method="get">
   First name: <input type="text" name="fname"><br>
   Last name: <input type="text" name="lname"><br>
   <button type="submit">Submit normal</button><br>
   <button type="submit" formaction="="/submitDifferent">Submit different</button>
</form> 

不确定是否支持浏览器。

如果要发布,则需要使用表单和按钮或input type=submit,并且模型属性必须与表单中的元素相对应。链接/锚定标记只会在未提交模型的情况下发出get请求,它不会发布任何内容,它只是一个链接如果你想制作一个表单,使用不同的按钮发布到不同的控制器/操作,那么你需要在点击按钮时添加一些javascript来更改表单操作,然后提交表单。我最终按照这里提到的过程完成了-你提到你想将ViewModel发布到基于按钮点击的不同mvc控制器。您提到的文章将ViewModel发布到同一控制器的相同ActionResult。然后,在ActionResult中,您有逻辑检查单击了哪个按钮。这就是你真正想要的吗?另外,正如@Joe Audette所提到的,更改表单标签的action属性是一种方法。实际上,我必须根据单击执行不同的处理。我本来打算用不同的控制器/动作来完成这项工作,但现在我可以只调用一个控制器来执行我需要的工作。我还可以将我的单个控制器操作重定向到所需的控制器。这将适用于get操作,但我需要执行post。将方法更改为post
<form action="/submitNormal" method="get">
   First name: <input type="text" name="fname"><br>
   Last name: <input type="text" name="lname"><br>
   <button type="submit">Submit normal</button><br>
   <button type="submit" formaction="="/submitDifferent">Submit different</button>
</form>