【问题标题】:How to prevent ajax form post with regular form post如何使用常规表单发布来防止 ajax 表单发布
【发布时间】:2014-09-20 07:55:33
【问题描述】:

我有一个包含使用 Html.BeginForm 的普通表单的 Razor 视图。它还使用 Html.RenderAction 插入包含另一个表单的局部视图。我正在使用 RenderAction,因此可以使用它自己的模型对部分视图进行强类型化。该部分视图包含一个使用 Ajax.BeginForm 的 ajax 表单。

当父视图中的常规表单发布并从控制器方法返回验证错误时,就会出现问题。 ajax 表单也会验证并显示它自己的错误消息。起初我以为只是客户端验证同时获取了两个表单,但是当我设置断点时,我发现 ajax 表单发布到的控制器方法也被调用了。

我宁愿保持这个视图简单,而不是对这两种形式都使用 ajax。出于同样的原因,我宁愿不将表单合并为一个,而是使用 javascript 或其他方法来区分两者。当常规表单发布时,我还有哪些其他选项可以阻止 ajax 表单发布或验证?

【问题讨论】:

  • 您是否在主视图<form> 标签中呈现部分(使用AJAX.BeginForm 及其提交按钮)?
  • @StephenMuecke,不。我怀疑某些问题是对 Ajax.BeginForm 的调用发生在同一个请求中,并且由于该请求是一个帖子...

标签: c# .net asp.net-mvc-5


【解决方案1】:

我对@StephenMuecke 的评论终于触发了谷歌正确关键字的正确想法。当然,答案已经在 StackOverflow 上。请参阅Html.RenderAction uses Post instead of GetHow can I get Html.RenderAction to call the Get method on a Post?。 @AndrewBarber 在第二个链接上的回答是一个很好的答案。在我为 ajax 表单的 GET 和 POST 操作方法提供不同的名称并从 GET 操作方法中删除 [HttpGet] 以允许使用 GET 或 POST 调用它之后,两种表单都按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多