如何确定是不是通过 MVC 启用了 JavaScript

Posted

技术标签:

【中文标题】如何确定是不是通过 MVC 启用了 JavaScript【英文标题】:How to determine if JavaScript is enabled through MVC如何确定是否通过 MVC 启用了 JavaScript 【发布时间】:2019-12-04 11:20:42 【问题描述】:

我有一个视图,它在单击 href 时调用函数“版本”,通常返回一个“版本.cshtml”。 我修改了那个Controllerfunction: 如果我单击该链接并启用 javascript,它会启动一个返回 JSON 结果的 ajax 调用。它会修改 DOM,因此页面不会重新加载。现在我的问题是区分何时启用 JavaScript - 如果启用,它应该返回 JSON 结果;如果禁用它应该返回“Version.cshtml”。当我检查元素时,当 JS 被禁用时,我们已经有一个名为“nojs-noborder”的类。但是我如何在没有 JS 的情况下通过控制器获取该值,以便我可以填充 bool 'isJavaScriptenabled'?

控制器函数如下所示:

   if (isJavaScriptEnabled)
        

            var tocstr = ControllerContext.RenderView(PartialView("Versiontoc", model));
            var middlestr = ControllerContext.RenderView(PartialView("Versionmiddle", model));
            var result = new JsonResult
            
                Data = new  tocstr, middlestr ,
                JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                MaxJsonLength = MaxValue
            ;

            return result;
        
        return View("Version", model);

被检查元素中的类:

<div class="nojs-noborder" id="contentwrapper">

【问题讨论】:

浏览器必须将该信息作为请求中的参数发送。服务器无法访问浏览器的设置以了解启用或未启用的内容。事实上,服务器甚至不知道(或关心)请求是来自浏览器还是来自其他类型的 HTTP 客户端。 老实说,虽然我认为您应该为此设置两种不同的操作方法,并让前端决定在每种情况下调用哪一种。拥有一个返回两种完全不同类型的内容的端点有点反模式恕我直言。 【参考方案1】:

从您的回答中不清楚您是否已这样做,但您需要更新视图以发出 AJAX 请求或遵循锚标记,具体取决于 JavaScript 是否启用。

然后,在您的控制器中,您不需要确定浏览器中是否启用了 JavaScript,而是需要确定请求是否为 AJAX 请求。如果是,则返回 JSON,否则返回视图。

大多数 JavaScript 库都会在 X-Requested-With 标头后面附加 XMLHttpRequest 的值。您可以检查此标头是否存在。

我不确定您使用的是哪个版本的 MVC,但您可以使用内置的 Request.IsAjaxRequest() 来确定这一点。

然后你的 ActionMethod 变成:

if (Request.IsAjaxRequest())

    var tocstr = ControllerContext.RenderView(PartialView("Versiontoc", model));
    var middlestr = ControllerContext.RenderView(PartialView("Versionmiddle", model));
    var result = new JsonResult
    
        Data = new  tocstr, middlestr ,
        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
        MaxJsonLength = MaxValue
    ;

    return result;

return View("Version", model);

如果此方法不可用,您可以自己滚动based on this answer

【讨论】:

谢谢!它就像一个魅力,你只是为我节省了这么多小时的挫败感。

以上是关于如何确定是不是通过 MVC 启用了 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

如何确定是不是启用了 PHP OPcache?

如何在Spring MVC中基于http请求头启用json的动态漂亮打印?

如何确定是不是启用沙盒

在 iPhone 上确定用户是不是启用了本地通知

Asp.Net MVC:如何确定您当前是不是在特定视图上

如何检查 iPhone 上是不是启用了通知