【问题标题】:Is Request.IsAjaxRequest() broken in the MVC RC1 refresh?MVC RC1 刷新中的 Request.IsAjaxRequest() 是否损坏?
【发布时间】:2010-10-04 17:46:33
【问题描述】:

这个 MVC 的东西很有趣,但每一步都有另一个小障碍。

我今天第一次将Request.IsAjaxRequest 与Microsoft 的AJAX 库结合使用。我还没有使用 jQuery(我不得不提一下,因为我刚刚超链接到一个关于 jQuery 的问题!)。

不幸的是,我在测试此代码之前安装了RC1 refresh

我正在使用Ajax.BeginForm

<% using (Ajax.BeginForm("Contact", "AboutUs", new AjaxOptions()
      {
          OnBegin = "submitComments_begin",
          OnSuccess = "submitComments_success",
          OnFailure = "submitComments_failure",
          OnComplete = "submitComments_complete",
          LoadingElementId = "submitting"

      }, new { id="fooForm" })) 

当我的控制器动作执行时,这些是我的标题:

连接编译指示,内容长度, 内容类型,接受,接受编码, Accept-Language、Host、Referer、 用户代理,UA-CPU

另外 FORM 包含这个参数

Request["__MVCASYNCPOST"] = "true"  

最终效果是返回 false!

Request.IsAjaxRequest()    

我遇到了 Chrome 和 Internet Explorer 的问题。

请告诉我我是否在做一些愚蠢的事情 - 或者是否有什么东西坏了。

最后的想法: 嗯 - 也许我需要一个新的期货 DLL。如果有问题我会更新的

【问题讨论】:

  • 顺便说一句,它肯定是通过 ajax 运行的——(例如,我没有禁用 JS)。我知道这是因为我的 onComplete 处理程序执行并且页面垂直滚动条没有重置
  • 我有同样的问题,但是当我更新 acripts 时它没有解决。有什么想法吗?
  • @zsharp - 你在使用 Fiddler 吗?如果没有得到它。查看 AJAX 调用发送的 HTTP 请求。验证它不包含 __MVCASYNCPOST 作为参数。如果仍有问题,请清除缓存。你替换了这个文件对吗? MicrosoftMvcAjax.js。我的是 5,287 字节长
  • @zsharp - 还要确保如果您使用的调试版本也复制了 MicrosoftMvcAjax.js 的调试版本

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


【解决方案1】:

我仍然不确定这是否是错误 - 任何人都可以确认吗?请记住,我说的是新的 RC1 Refresh,而不是原来的 RC1。

如果这是一个错误(我希望我只是在做一些粗心的事情),那么这是我现在的临时解决方案:

HttpRequestBase 上的扩展方法:

public static bool IsAjaxRequest2(this HttpRequestBase request)
        {
            return !string.IsNullOrEmpty(
                   request.Params["__MVCASYNCPOST"] as string);
        }

那我就用Request.IsAjaxRequest2(),等它修好了我再搜索替换。

【讨论】:

    【解决方案2】:

    感谢菲尔telling me I had to update the .js fileMicrosoftMvcAjax.js。尽管它实际上并没有在发行说明中告诉我我需要更新它们。

    Phil:如果您想要正确答案的分数,您有 2 天的时间来接受我自己的答案。谢谢!

    【讨论】:

      【解决方案3】:

      它不会显示在您发布的 sn-p 中,但您很可能有 form /form 标签。这些干扰了生成表单标签的 Ajax.BeginForm。删除外部表单标签后,Request.IsAjaxRequest 将返回 true。

      【讨论】:

      • 这可能是其他地方的问题,但在这种情况下,需要更新的是 MicrosoftMvcAjax.js。我现在已经切换到 jQuery 了
      猜你喜欢
      • 2020-05-23
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      相关资源
      最近更新 更多