【问题标题】:UmbracoForm: run action other than submitUmbracoForm:运行提交以外的操作
【发布时间】:2014-10-22 01:08:18
【问题描述】:

我是第一次认真使用 MVC 在 umbraco 中设置解决方案。我设法使用 BeginUmbracoForm 渲染了一个表单,并提交了数据,这很有效。

我的问题是,我想实现一个重置按钮,但由于我的数据在 Session 中,我必须重置服务器端。

查看:

@using (Html.BeginUmbracoForm("Search")) { @*在此填写*@ @Html.ActionLink("重置条件", "重置", "SearchCriteriaSurface", new {}, null) }

控制器:

公共类 SearchCriteriaSurfaceController : SurfaceController { [HttpPost] 公共 ActionResult 搜索(SearchParams 模型) { SearchParams.Params = 模型; ViewBag.HasSought = true; 返回 CurrentUmbracoPage(); } [HttpPost] 公共动作结果重置() { SearchParams.ResetParams(); 返回 CurrentUmbracoPage(); } }

点击后,我会被重定向到 /umbraco/Surface/SearchCriteriaSurface/Reset,这是一个无法找到的资源。

知道点击重置按钮后如何重新加载页面吗?

感谢您的宝贵时间。

【问题讨论】:

  • 你有一个动作链接,它只是呈现一个锚点。单击锚点时,它始终是[HttpGet],因此[HttpPost] 不应该在那里。

标签: c# asp.net-mvc-4 razor umbraco


【解决方案1】:

你有两个选择(当然更多,但我懒得去想它们):

1 您可以使用两个不同的按钮提交

<button type="submit" name="SubmitAction" value="Reset">Reset</button>
<button type="submit" name="SubmitAction" value="Submit">Submit</button>

在您的视图模型中,您只需要一个“SubmitAction”属性,并且在操作中您可以测试该值。有关讨论的更多详细信息,请参见此处:How do you handle multiple submit buttons in ASP.NET MVC Framework?

2 使用单独的表格

您可以完全拥有一个单独的表单(隐藏),并在您单击“重置”锚点时使用 javascript 来触发表单的提交。

【讨论】:

  • 干杯。单独的表格产生了奇迹 - 为什么我自己没有想到那个?
【解决方案2】:

@Html.ActionLink 渲染一个锚点。锚点不是表单,无法重定向到 HttpPost 操作。

要么删除HttpPost,要么为重置功能创建一个新表单。

【讨论】:

  • 感谢您的回复。在这种情况下,我看到一个选项可以使它成为一个获取,并重定向到当前节点 ID。我只是不认为这是一个很好的解决方案。是否可以覆盖提交时执行的操作?
  • 是的,这也是可能的。您可以为提交按钮提供特定值并在操作中获取这些变量。然后您可以检查该操作是作为提交还是作为重置。为此,请参阅 Digbyswift 的答案。
猜你喜欢
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 2011-06-19
  • 2022-08-17
  • 1970-01-01
相关资源
最近更新 更多