对于初学者,请原谅我,请在我的术语上纠正我。我完全相信我正在努力实现的正确用语。
我被赋予了构建ASP.Net Razor网站的任务。这对我来说是新鲜事。我非常精通PHP和ASP Classic。我需要弄清楚的是如何声明一个可随处访问的变量。我不知道在.net世界中你是否将它称为全局变量或应用程序变量或其他东西。但是,我将在Classic ASP中执行此操作。
在Classic 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教程。
如果有人可以通过告诉我我需要做什么或指向一个好的教程来帮助我,那将是很棒的。
答案 0 :(得分:2)
您要找的是Static Class/Member
这将允许您存储和共享整个应用程序的数据。
BUT!由于Web服务器是多线程的,您不希望这样做,否则您可能会遇到在完成当前请求之前数据被另一个请求覆盖的情况。
如果您需要将数据从控制器传递到View,您可以使用ViewBag
动态对象
如果您需要在其他地方使用数据(例如在帮助程序类中),请执行
HttpContext.Current.Application["VariableName"] = something
它基本上是一个字典,每个请求都有一个不同的Application
对象
答案 1 :(得分:0)
我认为你需要一个应用程序变量:
组:
Application["Message"] = "Welcome to the Contoso site.";
得到:
string message = Application["Message"] ;
更多信息:https://msdn.microsoft.com/en-us/library/94xkskdf.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
答案 2 :(得分:0)
有几种方法可以做到这一点。
对于您的示例,我假设对于同时使用该应用程序的不同用户,此特定变量可能不同。这更像是一个Session范围,而不是Application范围。
在这种情况下,您可以简单地使用继承并创建所有其他控制器和/或视图模型继承的基本控制器和/或基本视图模型类。这样,您可以在视图和控制器之间来回传递它,并在需要时读取/更新它。
如果符合您的需要,您还可以使用asp.net中内置的Request和HttpContext以及Session对象。可以在此处找到有关其部分功能的简要概述:https://docs.microsoft.com/en-us/aspnet/web-pages/overview/api-reference/asp-net-web-pages-api-reference ---谷歌搜索特定的功能会产生大量的结果。
如果您真的想要应用程序范围,您当然可以使用静态类来使用静态方法。然后,您不需要在每个其他类中包含该类,但是在调用该方法时,您需要完全命名该方法。
我不建议在这个级别使用静态变量。我无法想象在应用程序实例运行时您将要更改的每个用户需要更改的很多内容。我们使用的大多数这类项目都是缓存(通常是数据库查找等,我们不希望每次都从数据库中检索,并且RARELY会更新)。如果您使用缓存,请在更新时非常了解您的线程安全性。这是一个关于缓存的msdn:https://msdn.microsoft.com/en-us/library/aa478965.aspx ---或应用程序配置设置,如应用程序环境。我们从配置文件中提取大部分内容,它们是只读的,我们不会在应用程序的运行实例中更改它们。