簡體   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