使用JavaScript触发提交时,Request.IsAjaxRequest()为false

时间:2012-06-07 23:35:13

标签: jquery ajax asp.net-mvc-3

我有一个mvc3 Ajax.BeginForm。我没有点击按钮,而是希望从其中一个文本框的onblur事件中点击JavaScript按钮。

我已经尝试过以下代码,并且只使用$('#submitEmail')调用函数.Click();在里面。提交工作,我得到回复,但问题是在Controller Request.IsAjaxRequest()是假的。当我单击按钮时,我自己Request.IsAjaxRequest()为真。

@Html.TextBoxFor(model => model.LeadEmail, new { onBlur = "this.form.submit();" })

是的我用fiddler检查过X-Requested-With在使用JavaScript触发器时不存在。如何让它在onBlur事件上提交表单并获得正确的ajax标题?

3 个答案:

答案 0 :(得分:1)

所以我不确定为什么我尝试的方式不起作用。我认为它的方式应该有效。我按下按钮或代码按下按钮应该是一样的。显然有区别。也许在这个领域有知识的人可以告诉我们。 但解决方案是实际做一个ajax帖子。

<script type="text/javascript">
function FormAjaxSubmit() {
    var someThing = $("#SomeThing").val();
    $.ajax({
        url: "/Control/Action",
        type: "POST",
        data: { SomeThing: someThing },
        success: function (result) {
            $('#resultDiv').html(result);
        }
    });
}
</script>

答案 1 :(得分:1)

我想在Tigran的回答中添加一些内容:

<script type="text/javascript">
    function FormAjaxSubmit() {
        var f = $("form").serialize();
        $.ajax({
            url: "/Control/Action",
            type: "POST",
            data: { formCollection: f },
            success: function (result) {
                $('#resultDiv').html(result);
            }
        });
    }
</script>

答案 2 :(得分:0)

在表单上调用submit方法与单击表单的提交按钮基本相同,当您这样做时,浏览器会根据方法属性中定义的方法类型(GET / POST)执行请求。

调用submit不是ajax请求,它是一个表单提交,它会执行整页重新加载,这就是它无效的原因。