【问题标题】:Perform an action only if javascript is disabled [duplicate]仅在禁用 javascript 时执行操作 [重复]
【发布时间】:2023-03-13 15:34:01
【问题描述】:

我只想在禁用 javascript 时执行 MVC 操作。 为了达到这个目标,我在我的 html 中添加了一个标签<noscript>

<noscript>
    @Html.Action("BlogRss", "Home")
</noscript>

在我的控制器中,按照操作进行

public PartialViewResult BlogRss()
{
     return PartialView("_BlogRss", GetFeeds());
}

问题是标签&lt;noscript&gt;不影响动作的不执行。 无论是否启用 javascript,都一样!

我知道如果启用 JavaScript,&lt;noscript&gt; 中的所有内容都不会显示。

【问题讨论】:

  • 如果 JavaScript 被禁用,服务器为什么要关心?
  • 只有在禁用 JavaScript 时他才必须执行操作。否则它将通过 JavaScript 加载

标签: javascript asp.net-mvc-3 noscript


【解决方案1】:

&lt;noscript&gt; 是一个 HTML 标签,而不是一个服务器标签,并且只会在客户端起作用。服务器将始终呈现/执行您在它之间放置的任何代码 - 客户端不会呈现/执行它。

没有任何好的方法可以从服务器端检测客户端是否启用了 JavaScript。最现实的方法是使用 javascript/AJAX 设置隐藏值或 cookie (document.cookie),然后在服务器端使用此值/cookie。

@if (!IsJavascriptEnabled) {
    <noscript>
        @Html.Action("BlogRss", "Home")
    </noscript>
}

【讨论】:

  • 如何在 asp.net mvc 中做到这一点?我使用 javascript 创建了它: document.cookie = c_name + "=" + c_value Response.Cookies 中的服务器端操作不返回任何内容。对吗?
  • 它不会在第一次请求时返回任何内容(页面必须先转到客户端,然后 JavaScript 才能设置 cookie),但它适用于任何后续请求。跨度>
【解决方案2】:

如果你想要一个简单的客户端解决方案,我建议 META refresh。

<noscript>
        <meta http-equiv="refresh" content="0; url=http://appUrl/BlogRss/">
</noscript>

【讨论】:

  • 我不明白,这是做什么的?它是如何工作的?
  • @Riderman de Sousa Barbosa,如果客户端浏览器的 javascript 被禁用,它将使用执行请求的 GET 操作 OP 的 URL 刷新。
  • 是的,但是我需要做一个请求并且只返回一个 PartialView 而不是将整个站点重定向到一个新的 URL。 @Html.Action("BlogRss", "Home") 不会将整个站点重定向到新的 URL;
  • @Riderman de Sousa Barbose,如果你想获得局部视图,我不知道该怎么做。但我认为 J.Kommer 的解决方案不会起作用,因为当客户端浏览器上禁用 javascript 时,无法在客户端设置隐藏值或 cookie。
  • @RayCheng 你在某种意义上是正确的,我没有检测 JavaScript 是否被禁用 - 我假设它被禁用并检查它是否使用 JavaScript 来设置一个值/cookie,然后读取服务器端。
【解决方案3】:

如果您设置一个默认查询字符串(如“js=disabled”),则可以实现这一点,然后仅在启用 JS 时才重定向到不带此变量的 URL。我知道这有点糟糕(重定向),但我认为这是唯一的解决方案。

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多