如何在.net core的剃须刀页面中设置全局变量?

瓜瓜

我想检查浏览器是否为IE,并在剃须刀页面中做一些事情。

我只是在剃刀页面上做了一个功能来做到这一点。

但是,我认为使用该功能检查每个剃刀页面中的浏览器是否为IE是多余的。对于独立用户,我只需要检查一次并设置一个全局变量IsIE = true / false。其他页面将很容易知道,如果是IE。

问题是如何在剃须刀页面中获取/设置全局变量?

谢谢。

——————————————————

对@Neville Nazerane,这里是检查是否为IE的功能:

@{
    Boolean IsIE = false;
    string UA = Context.Request.Headers["User-Agent"].ToString();
    if (UA.Contains("Trident") || UA.Contains("MSIE"))
    {
        IsIE = true;
    }
    else
    {
        IsIE = false; ;
    }    
    if (IsIE == true)
    {

    }
    else
    {

    } 
}
内维尔·纳泽拉内

客户端通过向服务器发送请求(带有标头和正文)来处理HTTP请求。然后,您的服务器可以访问此信息并发送响应。这不会在服务器和客户端之间建立任何持久(持续)的连接。这意味着您的服务器与每个客户端之间没有永久链接。您声明的任何全局变量对于服务器的Web应用程序都是全局的,并且对于每个客户端都是通用的。

您要在此处执行的操作是创建与每个客户端的连接隔离的变量。通常,这是在SessionCookie变量的帮助下完成的但是在这种情况下,我看不出这将如何改善您编写的代码的性能。在您的代码中,您尝试从请求中访问Http标头。Cookie和会话变量的访问方式也非常相似。如果直接从标头中获取内容,则必须具有稍微更好的性能。如果您要清理代码,而不必在每个页面上都编写代码,则服务可能会很有帮助。

您可以为服务创建一个类,如下所示:

public class AgentChecker
{

    public bool IsIE { get; set; }

    // makes sure check is done only when object is created
    public AgentChecker(IHttpContextAccessor accessor)
    {
        string UA = accessor.HttpContext.Request.Headers["User-Agent"].ToString();
        if (UA.Contains("Trident") || UA.Contains("MSIE"))
        {
            IsIE = true;
        }
        else
        {
            IsIE = false; 
        }
    }

    // optional to simplify usage further. 
    public static implicit operator bool(AgentChecker checker) => checker.IsIE;

}

在您的启动类中添加以下内容:

// to access http context in a service
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
// makes sure object is created once per request
services.AddScoped<AgentChecker>();

设置完成后,您可以在视图中使用:

@inject AgentChecker checker

@* if you didn't create the implicit operator, you can use if (checker.IsIE) *@
@if (checker)
{
    <div>Is ie</div>
}
else
{
    <div>not ie</div>
}

inject进入你想用这个任意视图页面的顶部。尽管这仍然会创建一个新的对象的每个请求,它是清洁剂使用,只创建一个对象,无论你有多少局部视图中使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在ASP.NET Core 2.2中使用MVC代替剃须刀页面来使用Identity

如何在.net核心剃须刀页面中绑定复选框?

如何在asp.net核心剃须刀页面中重用HTML代码段?

如何将图像上传到asp.net core 2的剃须刀页面中的磁盘

C#.NET Core-如何通过“ onlick”事件加载剃须刀页面?

如何在同一.net core 3应用程序中使用剃须刀页面和控制器?

ASP.NET Core MVC如何通过剃须刀设置``必需''属性

如何在ASP.NET MVC3剃须刀中的文本框中设置默认名称

如何在ASP.NET MVC剃须刀中显示分组数据?

如何在ASP.NET剃须刀中对表格进行排序

如何调用在asp.net核心剃须刀页面项目的控制器中定义的功能

如何在asp.net mvc 5中使用jQuery ajax将模型添加到剃须刀页面?

如何在剃须刀中设置只读属性?

如何在剃须刀中设置数据显示

涉足ASP.Net Core的剃须刀页面执行

ASP.NET Core 2.0阅读:剃须刀页面中的选项

Route Override在ASP.NET Core 3.1剃须刀页面中不起作用

将ASP.NET Core剃须刀页面中的下拉列表绑定到ado.net存储过程

如何在ASP.NET MVC 3剃须刀ViewStart文件中指定不同的布局?

如何在ASP.net剃须刀网页中使用“使用”语句?

如何在MVC剃须刀asp.net中使用jQuery真人?

ASP.NET Core剃须刀页面应用程序中左侧的导航菜单以及关闭和打开按钮

如何扩展剃须刀页面

如何在剃须刀页面中使用PageRemote

如何在剃须刀页面中的属性内转义引号

如何在点网核心3.0 / 3.1的剃须刀页面中添加区域?

如何在剃须刀页面中划分行并转换为美元金额?

如何在剃须刀CheckBoxFor()中设置引导复选框

如何在MVC 4剃须刀DropDownListFor中设置默认值