Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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
在asp.net MVC应用程序登录期间检测javascript…此代码看起来正常吗?_Javascript_Asp.net_Asp.net Mvc - Fatal编程技术网

在asp.net MVC应用程序登录期间检测javascript…此代码看起来正常吗?

在asp.net MVC应用程序登录期间检测javascript…此代码看起来正常吗?,javascript,asp.net,asp.net-mvc,Javascript,Asp.net,Asp.net Mvc,我的登录操作最初是这样的: return new RedirectResult(nameValueCollection["ReturnUrl"]); 但是,我想知道客户端在加载主页之前是否启用了JavaScript,因此我将其更改为: return View(new LogInViewModel { ReturnUrl = nameValueCollection["ReturnUrl"] }); 并发送以下视图,而不是即时重定向: @model Obr.Web.Models.LogInVie

我的登录操作最初是这样的:

return new RedirectResult(nameValueCollection["ReturnUrl"]);
但是,我想知道客户端在加载主页之前是否启用了JavaScript,因此我将其更改为:

return View(new LogInViewModel { ReturnUrl = nameValueCollection["ReturnUrl"] });
并发送以下视图,而不是即时重定向:

@model Obr.Web.Models.LogInViewModel

@{
    Layout = null;
    string noJSReturnUrl = Model.ReturnUrl + (Model.ReturnUrl.Contains("?") ? "&" : "?") + "noJS=true";
}

<!doctype html>

<html>
    <head>
        <title>Loggin in...</title>
        <meta http-equiv="REFRESH" content="1;url=@noJSReturnUrl">
        <script type="text/javascript">
            window.location = "@Model.ReturnUrl";
        </script>
    </head>
    <body>
        <noscript>
            Loggin in...<br />
            <a href="@noJSReturnUrl">Click here if you are not redirected promptly.</a>
        </noscript>
    </body>
</html>
@model Obr.Web.Models.LogInViewModel
@{
布局=空;
字符串noJSReturnUrl=Model.ReturnUrl+(Model.ReturnUrl.Contains(“?”)?&):“?”+“noJS=true”;
}
登录。。。
window.location=“@Model.ReturnUrl”;
登录…
这个想法是,如果用户没有启用JavaScript,他们会看到一条简短的加载消息,主页会在一秒钟后加载。如果启用了JavaScript,页面将立即重新加载。将来,我甚至可以将视口的尺寸等信息发布到服务器上

这看起来有用吗?如果window.location命令运行时间超过一秒钟,它会被元刷新中断,还是会阻止刷新?我希望是后者,所以我不需要增加那些非js人员的延迟

我想我的新方法给重定向的有效载荷增加了一点额外的重量,但这不是额外的往返行程或任何东西,是吗?无论如何,重定向都会发生,不是吗


更新:我忘了提一个非常重要的问题。我实际上无法控制登录屏幕本身,只能控制它发布到的页面。此代码是依赖外部身份验证机制的产品的一部分。

您不需要额外的重定向来检测javascript。在用户登录的原始表单上,创建一个默认值为
false
的隐藏表单元素
javaScriptEnabled
。然后使用JavaScript将值设置为
true
。然后可以在处理程序中读取该值。如果为真,则启用JS


不需要额外的页面。

您不需要额外的重定向来检测javascript。在用户登录的原始表单上,创建一个默认值为
false
的隐藏表单元素
javaScriptEnabled
。然后使用JavaScript将值设置为
true
。然后可以在处理程序中读取该值。如果为真,则启用JS


不需要额外的页面。

因为您无法更改原始登录表单,所以您的解决方案看起来不错。它不会向拥有JS的用户显示任何内容,应该看起来就像另一个重定向,只需要额外的一跳


一旦您向
window.location
写入新的url,浏览器将停止处理当前页面的js和计时器以及所有内容,只需继续检索/处理下一页。

由于您无法更改原始登录表单,因此您的解决方案看起来不错。它不会向拥有JS的用户显示任何内容,应该看起来就像另一个重定向,只需要额外的一跳


一旦你将一个新的url写到
window.location
上,浏览器就会停止处理当前页面的js和计时器以及所有内容,然后继续检索/处理下一个页面。

啊,这是完全正确的,但我忘了提一下,这不是我的选择。我发布了一个从外部登录的产品。不过,你的解决方案是完美的。啊,这是完全正确的,但我忘了提到这不是我的选择。我发布了一个从外部登录的产品。不过,你的解决方案将是完美的。