gpt4 book ai didi

asp.net-mvc-3 - ASP.NET MVC 3以一种形式提交多个输入

转载 作者:行者123 更新时间:2023-12-03 12:09:03 25 4
gpt4 key购买 nike

我目前有一个问题,多个 Action 按钮的格式相同。

第一个按钮将执行验证,而第二个按钮将保存配置文件。第三种可以简单地将用户重定向到页面外,但是仍然需要他们通过 Controller 进行某些跟踪。最后一个按钮是删除。因为它们放在一起并且我确实需要通过POST传递ModelBinding,所以不可能将它们分成多种形式。

当前,为了区分正在单击的操作,我在表单和onclick中都有一个隐藏的输入,javascript将更新该隐藏的输入,以便将其传递回 Controller 。

我这样做的原因是因为某些奇怪的原因,FormCollection不想保留我的提交值。我尝试通过访问 Controller 中的按钮

formCollection["verify"]

但是事实证明它是空的。输入提交的ID和名称都设置为验证。

我也尝试了很多其他建议,例如 thisthis,但无济于事。有没有使用javascript更改隐藏输入的更好方法来解决我的问题?

最佳答案

最好的方法是让单独的 Action 处理不同的按钮调用,如this article中所述。

如果您想采取一个丑陋的 Action 来做所有的事情,那么您可以给您的提交按钮命名:

@using (Html.BeginForm())
{
... input fields for the model

<button type="submit" name="btn" value="verify">Verify data</button>
<button type="submit" name="btn" value="save">Save data</button>   
<button type="submit" name="btn" value="redirect">Redirect</button>
}

您不需要任何隐藏字段或javascript。然后,在 Controller 操作中,您将检查 btn参数的值(显然它将成为 View 模型的一部分):
[HttpPost]
public ActionResult Foo(MyViewsModel model)
{
if (model.Btn == "verify")
{
// the Verify button was clicked
}
else if (model.Btn == "save")
{
// the Save button was clicked
}
else if (model.Btn == "redirect")
{
// the Redirect button was clicked
}
else
{
// ??? throw
}

...
}

当然,如果您遵循我的建议并分开进行操作(如本文所述):
@using (Html.BeginForm("Action", "Home"))
{
... input fields for the model

<input type="submit" name="verify" value="Verify data" />
<input type="submit" name="save" value="Save data" />
<input type="submit" name="redirect" value="Redirect" />
}

接着:
[HttpParamAction]
[HttpPost]
public ActionResult Verify(MyViewModel model)
{
...
}

[HttpParamAction]
[HttpPost]
public ActionResult Save(MyViewModel model)
{
...
}

[HttpParamAction]
[HttpPost]
public ActionResult Redirect(MyViewModel model)
{
...
}

这是更清晰的代码,不违反单一责任原则。

关于asp.net-mvc-3 - ASP.NET MVC 3以一种形式提交多个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8258750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com