首先,请原谅我,并纠正我的术语。我非常确定用正确的词来表达我想要实现的目标。
我被赋予了建立一个ASP.Net剃刀网站的任务。这对我来说是新的东西。我精通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
在这种情况下,请求(“SelLoc”)可以是Request.QueryString或Request.Form。然后在我的网站中的任何地方,我都可以使用变量SelLoc。所以,简而言之...我需要能够设置一个变量。检查是否由Request.Form设置,如果不是,检查Request.QueryString,如果不是,则将值设置为“All”。我该怎么写呢?我该把它放在哪里呢?
当我使用Visual Studio2012创建网站时,我选择了剃刀网站( ASP.NET V2)。
这似乎应该是任何具有任何类型的服务器端编程的网站的基本基本任务,但是尝试在线查找信息和文档几乎是不可能的,但可能是因为我没有使用正确的术语来回答我的问题。我还没有找到任何关于设置变量的Razor教程,这些变量可以在整个网站上使用。
如果有人能在这里帮助我,告诉我需要做什么,或者给我一个好的教程,那就太好了。
发布于 2018-03-12 19:31:58
您要查找的内容名为Static Class/Member
这将允许您存储和共享整个应用程序的数据。
但!由于web服务器是多线程的,你不会想要这样做,否则你可能会遇到这样的情况:在你完成当前请求之前,数据会被另一个请求覆盖。
如果需要将数据从控制器传递到视图,可以使用ViewBag
动态对象
如果您需要在其他任何地方使用数据(例如,在helper类中),那么就这样做
HttpContext.Current.Application["VariableName"] = something
它基本上是一个字典,每个请求都有一个不同的Application
对象
发布于 2018-03-12 20:28:09
有几种方法可以做到这一点。
对于您的示例,我假设此特定变量对于同时使用应用程序的不同用户可以是不同的。这更像是一个会话作用域,而不是应用程序作用域。
在这种情况下,您可以简单地使用继承并创建一个基础控制器和/或基础视图模型类,您的所有其他控制器和/或视图模型都继承自这个类。这样,您就可以在视图和控制器之间来回传递它,并在需要时读取/更新它。
您还可以使用asp.net中内置的Request、HttpContext和Session对象(如果它们适合您的需要)。他们的一些功能的简要概述可以在这里找到:https://docs.microsoft.com/en-us/aspnet/web-pages/overview/api-reference/asp-net-web-pages-api-reference -谷歌搜索特定的结果会产生大量的结果。
如果你真的想要Application scope,你当然可以使用静态类,因为你利用了静态方法。然后,您不需要在每个其他类中都包含该类,但在调用方法时,您需要对该方法进行全名限定。
不过,我不建议在这个级别使用静态变量。我无法想象在应用程序实例运行时,需要为每个用户更改的内容有多少。我们使用的大多数这类项都是缓存(通常是db查找之类的,我们不想每次都从db中检索,也很少更新)。如果你使用缓存,在更新它们时要非常注意你的线程安全。这是一个关于缓存的msdn:https://msdn.microsoft.com/en-us/library/aa478965.aspx -或者应用程序配置设置,比如应用程序环境。我们从配置文件中提取其中的大多数,并且它们是只读的,我们不会在应用程序的运行实例中更改它们。
https://stackoverflow.com/questions/49242945
复制相似问题