我看过一些与这个问题有关的帖子,但是没有遇到任何解决这个问题的好方法.与我的其他应用程序一样,我希望能够支持JavaScript启用和JavaScript禁用场景,这就是为什么我想检测请求是否为ajax.
我意识到正在使用的iframe方法在技术上不是ajax,但是我试图模仿ajax效果.
欢迎任何建议.
解决方法
问题是当通过iFrame发布文件时,“X-Requested-With”标题未设置,您不能在Javascript中为普通形式的POST设置特定的请求标头.您将不得不诉诸其他技巧,例如发送包含值的POST的隐藏字段,然后更改或覆盖“IsAjaxRequest”扩展方法以检查此情况.
How to override an existing extension method?
可能最好的选择可能是使用不同的名称添加您自己的扩展方法,默认的MVC扩展方法代码与更改以检测您的iFrame上传POST,然后在您希望需要的地方使用您的扩展方法.
默认情况下,jQuery实际上将“X-Requested-With”标头设置为“XMLHttpRequest”.这是非常有用的,只要你小心地做所有的AJAX调用jQuery.
根据您的需要,可以轻松地在动作过滤器中设置检测,以便在需要时使用它,甚至可以将其构建成如下所示的控制器类:
[jQueryPartial] public abstract class MyController : Controller { public bool IsAjaxRequest { get; set; } }
ActionFilterattribute:
public class jQueryPartial : ActionFilterattribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { // Verify if a XMLHttpRequest is fired. // This can be done by checking the X-Requested-With // HTTP header. MyController myController = filterContext.Controller as MyController; if (myController != null) { if (filterContext.HttpContext.Request.Headers["X-Requested-With"] != null && filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") { myController.IsAjaxRequest = true; } else { myController.IsAjaxRequest = false; } } } }
并使用实现:
public class SomeController : MyController { public ActionResult Index() { if (IsAjaxRequest) DoThis(); else DoThat(); return View(); } }
原文地址:https://www.jb51.cc/aspnet/246665.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。