在使用jquery post时,如何从firefox获取Request.IsAjaxRequest(),从IE返回false

leo*_*ora 2 asp.net-mvc jquery blockui jquery-blockui

我正在尝试测试jquery帖子.我发布了一个表单,想要在ajax中更新并用div上的成功表单替换(看起来像一个常见的用例).

以下代码在Firefox中运行良好,但在IE中则不行.

一个问题是来自Firefox Request.IsAjaxRequest()是真的但来自IE,Request.IsAjaxRequest()返回false

注意:我在我的控制器操作中放入Thread.Sleep作为测试,以确保我可以看到发生了什么.

这是我的观看代码:

 <div id="contact">
   <form action="/Tracker/Add" method="post">
    <fieldset id="inputbox">
       <p>

        <label>Today's number</label>   <input class="inputText" id="weight" name="weight" type="text" value="208" /></p>
        <p><label>Today's Date</label>     <input class="inputText" id="datepicker" name="date" type="text" value="03-Mar-2010" /></p>
        <p><input type="submit" value="Enter" /></p>
    </fieldset>
Run Code Online (Sandbox Code Playgroud)

这是javascript/jquery代码:

<script type="text/javascript" src="../../Scripts/jquery/1.3.2/jquery-1.3.2.min.js"></script>

 <script type="text/javascript">
    $(document).ready(function() {
    $('#contact form').live('submit', function() {

            //$("#Loading").fadeIn(); //show when submitting

            $.post($(this).attr('action'), $(this).serialize(), function(data) {
                $("#contact").replaceWith($(data));
            });
            return false;
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

这是我的控制器动作:

    public ActionResult Add()
    {
         if (if (Request.IsAjaxRequest())
         {
                  //firefox will hit this but IE wont
          }


        Thread.Sleep(5000);
        return PartialView("EntryView", new MyViewModel());
    }
Run Code Online (Sandbox Code Playgroud)

Bro*_*ell 8

我验证了你的代码(我无法找到错误)没有发送jQuery 1.3.2和IE 6.0.2900.5512的XHR请求; 将jQuery升级到下一个可用版本1.4.0,修复了损坏的行为.使用1.4.0(及更高版本),IE使用AJAX发布表单并发送IsAjaxRequest()工作所需的X-Requested-With标头.你能升级jQuery吗?我没有运气找到具体的错误/解决方法,但如果你需要坚持1.3.2,我可以继续挖掘.