2015-08-27 82 views
0

我正在一个MVC6应用程序,我想要一个按钮将视图的模型发布到控制器。我有使用taghelper下面的标记 -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控制器。

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

+0

如果你想发布,那么你需要使用一个表单和一个按钮或输入type = submit和模型属性必须对应于表单中的元素。一个链接/定位标记只会在未提交任何模型的情况下发出获取请求,不会发布任何内容,如果您想要使用不同的按钮发布到不同的控制器/操作的表单,则只是链接 –

+0

,然后你将需要添加一些JavaScript来点击按钮来改变表单动作,然后提交表单。 –

+0

我结束了以下提到的过程 - https://visualstudiomagazine.com/articles/2014/11/01/performing-multiple-actions.aspx – czuroski

回答

0

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

+1

您提到过,您想将ViewModel发布到* different * mvc控制器点击按钮。您提到的文章将ViewModel发布到* same * Controller的* same * ActionResult。然后,在那个ActionResult中,你有逻辑检查哪个按钮被点击。这是你真正想要的吗?否则就像@Joe Audette提到的那样,改变表单标签的* action *属性是一种方法。 – Vlince

+0

我实际上必须根据点击执行不同的处理。我原本打算用不同的控制器/动作完成这个任务,但现在我可以调用一个控制器并执行我所需要的工作。我也可以让我的单一控制器动作重定向到所需的控制器。 – czuroski

0

你可以在按钮中使用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> 

不知道浏览器的支持。

+0

这将工作获取操作,但我需要执行一个职位。 – czuroski

+0

将方法更改为“发布” –