繁体   English   中英

ASP.Net Razor C#变量可访问所有页面

[英]ASP.Net Razor C# Variables Accessible to All Pages

对于初学者,请原谅我,并请更正我的术语。 我非常确定要完成的工作要使用正确的词语。

我被赋予建立一个ASP.Net Razor网站的任务。 对我来说这是新事物。 我非常精通PHP和ASP Classic。 我需要弄清楚的是如何声明一个随处可见的变量。 我不知道在.net世界中您是否将其称为全局变量或应用程序变量或其他名称。 但是,这是我在经典ASP中的处理方式。

在经典ASP中,我将有一个名为VarFunct.asp的文件。 这将是我声明变量的文件,并且具有可以从任何地方访问的各种功能。 我将在所有页面上都包含VarFunct.asp文件。 无论如何,这就是我真正想要做的(用我在Classic ASP中的编写方式)…

SelLoc = Request("SelLoc")
If Len(Trim(SelLoc)) = 0 Then
    SelLoc = "All"
End If

在这种情况下,Request(“ SelLoc”)可以是Request.QueryString或Request.Form。 然后,在我网站的任何地方,我都可以使用变量SelLoc。 因此,简而言之...我需要能够设置一个变量。 检查是否由Request.Form设置,如果没有,则检查Request.QueryString,如果未将值设置为“ All”。 我该怎么写? 那我放在哪里呢?

当我使用Visual Studio 2012创建网站时,我选择了ASP.NET网站(Razor V2)。

对于任何具有任何服务器端编程的网站来说,这似乎应该是一项基本的基本任务,但是几乎不可能在线查找信息和文档,但这可能是因为我没有使用正确的术语来回答问题。 我还没有找到任何有关设置可以在整个网站上全局使用的变量的Razor教程。

如果有人可以通过告诉我我需要做什么或为我提供一个好的教程来帮助我,那就太好了。

您在寻找什么叫做静态类/成员

这将允许您存储和共享整个应用程序的数据。

但! 由于Web服务器是多线程的,因此您不希望这样做,否则您可能会遇到这样的情况,即在完成当前请求之前,另一请求会覆盖数据。

如果需要将数据从控制器传递到View,则可以使用ViewBag动态对象

如果您需要在其他任何地方使用数据(例如在帮助器类中),请执行

HttpContext.Current.Application["VariableName"] = something

它基本上是一个字典,每个请求将有一个不同的Application对象

我认为您需要一个Application变量:

组:

Application["Message"] = "Welcome to the Contoso site.";

得到:

string message = Application["Message"] ;

更多信息: https : //msdn.microsoft.com/zh-cn/library/94xkskdf.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

有几种方法可以做到这一点。

对于您的示例,我假设对于同时使用该应用程序的不同用户,此特定变量可能有所不同。 这更多的是会话范围而不是应用程序范围。

在这种情况下,您可以简单地使用继承并创建所有其他控制器和/或视图模型都继承的基本控制器和/或基本视图模型类。 这样,您可以在视图和控制器之间来回传递它,并在需要时读取/更新它。

如果需要,您还可以使用asp.net中内置的Request和HttpContext和Session对象。 可以在此处找到其某些功能的简要概述: https : //docs.microsoft.com/zh-cn/aspnet/web-pages/overview/api-reference/asp-net-web-pages-api-reference ---谷歌搜索特定的产生大量的结果。

如果您确实需要Application作用域,那么您当然可以在使用静态方法时使用静态类。 然后,您不必在其他所有类中都包含该类,但是在调用该方法时,您需要全名限定该方法。

我不建议在此级别使用静态变量。 我无法想象在应用程序实例运行时,您将要更改的每个用户都需要改变很多事情。 我们使用的大多数此类项目都是缓存(通常是db查找等,我们不想每次都从db中检索,并且很少得到更新)。 如果您使用高速缓存,请在更新高速缓存时非常注意线程的安全性。 这是有关缓存的msdn: https : //msdn.microsoft.com/zh-cn/library/aa478965.aspx ---或应用程序配置设置,例如应用程序环境。 我们从配置文件中提取大多数数据,并且它们是只读的,我们不会在应用程序的运行实例中更改它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM