仅在禁用javascript的情况下执行操作

Perform an action only if javascript is disabled

本文关键字:情况下 执行 操作 javascript      更新时间:2023-09-26

我想执行MVC操作只有当javascript被禁用。为了实现这个目标,我在html中添加了一个标记<noscript>:

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

在我的控制器中,跟随动作

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

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

我知道<noscript>里面的一切都不会显示,如果JavaScript是启用的

<noscript>是HTML标记,而不是服务器标记,并且只在客户端起作用。服务器总是渲染/执行你放在它之间的任何代码——客户端只是不会渲染/执行它。

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

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

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

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

这可以实现,如果你设置一个默认的queryString像"js=disabled",然后你重定向到一个URL没有这个变量只有当js是启用的。我知道这有点糟糕(重定向),但我认为这是唯一的解决方案。