如何确定是不是通过 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的主要内容,如果未能解决你的问题,请参考以下文章