Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定是否通过MVC启用了JavaScript_Javascript_Html_Asp.net Mvc_Noscript - Fatal编程技术网

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

如何确定是否通过MVC启用了JavaScript,javascript,html,asp.net-mvc,noscript,Javascript,Html,Asp.net Mvc,Noscript,我有一个视图,单击a href调用函数“Versions”,该函数通常返回一个“Version.cshtml”。 我修改了控制器的功能: 如果单击该链接并启用JavaScript,它将启动一个ajax调用,返回一个JSON结果。它修改DOM,使页面不会重新加载。现在我的问题是区分什么时候启用了JavaScript,如果启用了JavaScript,它应该返回JSON结果;如果禁用,则应返回“Version.cshtml”。当我检查元素时,当JS被禁用时,我们已经有了一个名为“nojs nobord

我有一个视图,单击a href调用函数“Versions”,该函数通常返回一个“Version.cshtml”。 我修改了控制器的功能: 如果单击该链接并启用JavaScript,它将启动一个ajax调用,返回一个JSON结果。它修改DOM,使页面不会重新加载。现在我的问题是区分什么时候启用了JavaScript,如果启用了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);
被检查元素中的类别:


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

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

大多数JavaScript库都会将
X-request-With
头附加上
XMLHttpRequest
。您可以检查是否存在此标头

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

然后,您的操作方法变成:

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);

如果此方法不可用,您可以使用自己的

答案中不清楚您是否已经这样做了,但是您需要更新视图以发出AJAX请求,或者根据是否启用了JavaScript跟踪锚定标记

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

大多数JavaScript库都会将
X-request-With
头附加上
XMLHttpRequest
。您可以检查是否存在此标头

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

然后,您的操作方法变成:

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);

如果此方法不可用,您可以自行滚动

,浏览器必须将该信息作为请求中的参数发送。服务器无权访问浏览器的设置以了解启用或未启用的内容。事实上,服务器甚至不知道(或关心)请求是来自浏览器还是来自另一种类型的HTTP客户端。老实说,我认为您应该有两种不同的操作方法,并让前端决定在每种情况下调用哪种方法。拥有一个返回两种完全不同类型内容的端点有点反模式。浏览器必须将该信息作为请求中的参数发送。服务器无权访问浏览器的设置以了解启用或未启用的内容。事实上,服务器甚至不知道(或关心)请求是来自浏览器还是来自另一种类型的HTTP客户端。老实说,我认为您应该有两种不同的操作方法,并让前端决定在每种情况下调用哪种方法。拥有一个返回两种完全不同类型内容的端点有点反模式。谢谢!这很有魅力,你帮我省去了那么多小时的挫折。谢谢你!这很有魅力,你帮我省去了那么多小时的挫折。