【问题标题】:Asp.Net MVC Ajax.BeginForm is not submitting via AjaxAsp.Net MVC Ajax.BeginForm 未通过 Ajax 提交
【发布时间】:2011-05-27 11:10:14
【问题描述】:

我的表格如下

<div id="contact-form" class="hidden" title="Online Request Form">
    @Using (Ajax.BeginForm("Contact", "Main",
                          Nothing,
                          New AjaxOptions With {.UpdateTargetId = "status", .HttpMethod = "post"},
                          New With {.id = "contactUs"}))
        @<div>
            @Html.LabelFor(Function(m) m.Name)<br />
            @Html.TextBoxFor(Function(m) m.Name)<br />
            @Html.LabelFor(Function(m) m.Phone)<br />
            @Html.TextBoxFor(Function(m) m.Phone)<br />
            @Html.LabelFor(Function(m) m.Email)<br />
            @Html.TextBoxFor(Function(m) m.Email)<br />
            @Html.LabelFor(Function(m) m.Question)<br />
            @Html.TextAreaFor(Function(m) m.Question)<br />
            @Html.LabelFor(function(m) m.Security)<br />
            @Html.TextBoxFor(Function(m) m.Security)<br />
            <noscript>
                <input type="submit" name="submit" value="Ok" />
            </noscript>
            @Html.ValidationSummary("Oops, please correct the errors.")<span id="status">@TempData("status")</span>
        </div>
    End Using
</div>

我在 jQuery-UI 模态窗口中打开它

<script>
    $(function () {

        // Open the modal dialog from the div.contact-us click event
        $('#contact-us').click(function () {
            $('#contact-form').dialog('open');
            return false;
        });

        // Manage the modal dialog behavior.
        $('#contact-form').dialog({
            modal: true,
            autoOpen: false,
            buttons: {
                Cancel: function () {
                    $(this).dialog('close');
                },
                Ok: function () {
                    $('form#contactUs').trigger('submit');
                }
            }
        });
    });

</script>

当我单击“确定”按钮时,它正在发布到相应的控制器,但它不是通过 AJAX 发布

    ''# fix the StackOverflow code coloring issue.
    <HttpPost()>
    Function Contact(ByVal contactForm As Models.ContactForm) As ActionResult
        ViewData("Testimonials") = Helpers.GetTestimonials

        If ModelState.IsValid Then
            ''# Submit the email
            TempData("status") = "Thank you, we will be in touch"
        Else
            ''# Return False
            TempData("status") = "Oops, please correct the errors."
        End If


        If Request.IsAjaxRequest Then
            Return Content(TempData("status").ToString)
        Else
            Return View("Index")
        End If
    End Function

我做错了什么?提交表单后,我的 URL 是 http://example.com/Main/Contact,它告诉我 IsAjaxRequest = false

编辑

即使我不使用 jquery-ui 的“ok”按钮而只是将&lt;input type="submit" name="submit" value="Ok" /&gt; 添加到表单中,表单也会在没有 Ajax 的情况下发布

【问题讨论】:

  • 期待 StackOverflow 能够为 Razor 语法适当着色的那一天。

标签: asp.net-mvc razor ajax.beginform


【解决方案1】:

你有 jquery ajax 脚本吗?当我没有包含它时,我注意到了这种行为:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

【讨论】:

  • 我希望这些评论很有趣,而且你们不会都说我智障。哈哈
  • @ChaseFlorell 可能会赞成,因为我们也有同样的感觉;)
  • 值得注意的是,要安装此脚本,请使用 Install-Package Microsoft.jQuery.Unobtrusive.Ajax
【解决方案2】:

我有一段时间没有使用 ASP.NET MVC AJAX 帮助程序,但我相信 Ajax.BeginForm 在生成的 (HTML) 标记中添加了一个内联 onsubmit 处理程序。

如果是这种情况,以编程方式(您的触发submit 事件的jQuery)在此表单上调用提交将不会调用表单的onsubmit 函数,这很可能会取消正常提交动作并通过 AJAX 提交表单。

有关发生这种情况的更多信息,请查看this related answer

作为替代方案,您可以使用

通过 AJAX 发布表单

我发现这两种方法中的任何一种都比使用 Microsoft 的 AJAX 助手更轻松。

【讨论】:

  • 我也是这么想的,但是this SO question说要使用trigger方法
  • @rockinthesixstring:我不相信。文档 (api.jquery.com/submit) 声明 .submit() 方法是 .trigger('submit') 的快捷方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 2013-11-02
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
相关资源
最近更新 更多