2017-02-24 70 views
1

我已经在剃刀中完成了一个表单。用户可以在两个动作之间选择采取与他们填写到表单中的数据,将表单数据传递给.NET中的多个动作

SaveCurrentProgress(User user) 

...允许用户保存表单的当前状态,然后回来稍后。或者:

SubmitFinalVersion(User user) 

它保存表单数据,然后呈现它只读。我知道如何使用Html.BeginForm()将一个对象传递给一个单独的动作/控制器,但是我如何编写它,以便用户可以将对象传递给两个动作之一?

+1

我觉得这个问题有你正在寻找的答案:[你如何处理ASP.NET MVC框架中的多个提交按钮?](http://stackoverflow.com/questions/442704/how-do-you- handle-multiple-submit-buttons-in-asp-net-mvc-framework) –

+1

只是在数据中加入一些东西,这些东西被传递来确定进程...所以它总是会触发action1,但它可能会在action1中传递给action2取决于数据中的一个值。 – Seabizkit

回答

1

您不能真的。你可能会制造出一些JS解决方案,它会根据点击按钮来切换动作,但就基本形式而言,无法有条件地改变动作。

但是,您可以命名您的提交按钮,然后在一个单一的行动内分支。例如:

<button type="submit" name="SaveProgress">Save Current Progress</button> 
<button type="submit" name="SaveFinal">Save Final Version</button> 

然后,在你一个行动:

if (Request["SaveProgress"] != null) 
{ 
    // save progress 
} 
if (Request["SaveFinal"] != null) 
{ 
    // save final 
} 

因为只有被点击的按钮将使其进入后的数据,您可以使用该按钮的名称存在以确定用户点击了哪个。

最后一个选择是根本不用担心保存不完整的数据服务器端。您可以利用localStorage在用户将其添加到表单中时保存输入的数据。这意味着你甚至不需要明确的按钮来达到目的。然而,这种方法的缺点是必须绑定到用户正在编辑的浏览器和机器上(因为它是客户端)。如果他们移动到另一台计算机上,他们将无法恢复编辑。