如何确定是否通过 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
我有一个视图,它在单击 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