Enr*_*ico 3 javascript c# asp.net web-applications
我正在使用ASP.NET C#,并且在我的viewsAll.cshtmli中有一个JavaScript
,用于检测用户是否使用Internet Explorer.
的alert("Other Browser");或者alert("Internet Explorer");是工作的罚款.
问题是c#代码行都是executet:
@{ Session["BrowserName"] = "IE";}和@{Session["BrowserName"] = "other";}
但在我使用Internet Explore的情况下,它应该只执行
@{ Session["BrowserName"] = "IE";}
viewsAll.cshtml:
<script>
var usera = window.navigator.userAgent;
var ie = usera.indexOf("IE ");
if(ie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer
{
alert("Internet Explorer");
$('head').append('<link href="@Url.Content("~")Content/Styles/styleForIE.css" rel="stylesheet" />');
@{ Session["BrowserName"] = "IE";}
}
else{ // If Other Browser
alert("Other Browser");
$('head').append('<link href="@Url.Content("~")Content/Styles/styleForOther.css" rel="stylesheet" />');
@{Session["BrowserName"] = "other";}
}
</script>
Run Code Online (Sandbox Code Playgroud)
你在这里混淆了服务器端代码和客户端代码错误的概念:
所有C#代码总是在服务器端执行,即使它在客户端条件块中.
这意味着你的两个@{ Session["BrowserName"] = "XX"; }代码块总是在服务器上执行而不仅仅是适当的代码块,因为这两个块只是"客户端条件" - 在服务器上它们只是"文本".
您应该/可以做的是在服务器端评估中转换条件并检查服务器上的用户代理:
<script>
@if(Request.UserAgent.Contains("IE ") || new Regex(@"Trident.*rv\:11\.").Match(Request.UserAgent).Success)
{
Session["BrowserName"] = "IE";
<text>
alert("Internet Explorer");
$('head').append('<link href="@Url.Content("~")Content/Styles/styleForIE.css" rel="stylesheet" />');
</text>
}
else
{
Session["BrowserName"] = "other";
<text>
alert("Other Browser");
$('head').append('<link href="@Url.Content("~")Content/Styles/styleForOther.css" rel="stylesheet" />');
</text>
}
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |