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

How to determine if JavaScript is enabled through MVC

我有一个视图,它在单击 href 时调用函数 'Versions',通常 return 是 'Version.cshtml'。 我修改了控制器功能: 如果我单击 link 并启用 JavaScript,它会启动一个 ajax 调用,return 是一个 JSON 结果。它修改 DOM 因此页面不会重新加载。现在我的问题是区分何时启用或不启用 JavaScript - 如果启用,它应该 return 结果是 JSON ;如果禁用它应该 return 'Version.cshtml'。当我检查元素时,当 JS 被禁用时,我们已经有一个名为 'nojs-noborder' 的 class。但是我如何在没有 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);

检查元素中的class:

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

从您的回答中不清楚您是否已经这样做,但您需要更新您的视图以发出 AJAX 请求或根据是否启用 JavaScript 跟随锚标记。

然后,在你的控制器中,你不需要判断浏览器是否启用了JavaScript,而是判断这个请求是否是一个AJAX请求。如果是,return JSON 否则 return 视图。

大多数 JavaScript 库会在 X-Requested-With header 后附加值 XMLHttpRequest。您可以检查此 header.

是否存在

我不确定您使用的是哪个版本的 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