【问题标题】:MVC6 Taghelper Post Model to ControllerMVC6 Taghelper 将模型发布到控制器
【发布时间】:2015-11-22 05:45:55
【问题描述】:

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

<a asp-route-area="MyArea" asp-controller="MyController" asp-action="MyAction">Save</a>

这是我在视图中的模型声明 -

@model MyObject

这是我的控制器操作 -

public IActionResult MyAction(MyObject mo)
{            
     return new EmptyResult();
}

当我单击按钮时,它已正确路由到控制器,但模型对象为空。 如何在单击按钮时让整个模型回发到控制器?

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

编辑 - 我不一定需要它发布到不同的控制器/动作。我能够让控制器决定如何处理,这似乎完成了我需要的。

【问题讨论】:

  • 如果要发布,则需要使用表单和按钮或输入类型=提交,并且模型属性必须与表单内的元素相对应。一个链接/锚标签只会发出一个没有提交模型的获取请求,它不会发布任何东西,它只是一个链接
  • 如果您想制作一个使用不同按钮发布到不同控制器/动作的表单,那么您需要在单击按钮时添加一些 javascript 以更改表单动作,然后提交形式。
  • 我最终遵循了这里提到的过程 - visualstudiomagazine.com/articles/2014/11/01/…

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


【解决方案1】:

您可以在按钮上使用 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> 

不确定浏览器是否支持。

【讨论】:

  • 这适用于获取操作,但我需要执行发布。
  • 将方法更改为“发布”
【解决方案2】:

我最终使用了here 概述的解决方案。 本质上,它的工作方式是创建两个具有不同名称的按钮,并让控制器使用按钮名称作为参数。然后我只检查这些参数,如果它们有值,我就以这种方式处理。

【讨论】:

  • 您提到您希望根据按钮单击将 ViewModel 发布到 不同 mvc 控制器。您提到的文章将 ViewModel 发布到 same 控制器的 same ActionResult。然后,在该 ActionResult 中,您具有检查单击了哪个按钮的逻辑。那是你真正想要的吗?否则正如@Joe Audette 提到的那样,更改表单标签的 action 属性是可行的方法。
  • 我实际上要根据点击进行不同的处理。我原本打算用不同的控制器/动作来完成这个,但现在我可以只调用一个控制器并执行我需要的工作。我也可以将我的单个控制器操作重定向到所需的控制器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
相关资源
最近更新 更多