Переменные ASP.Net Razor C#, доступные для всех страниц

Для начала, пожалуйста, простите меня и поправьте меня в моей терминологии. Я вполне уверен в правильности слов, чтобы использовать для того, что я пытаюсь выполнить.

Мне поручили создать веб-сайт ASP.Net Razor. Это что-то новое для меня. Я очень хорошо разбираюсь в PHP и ASP Classic. Мне нужно понять, как объявить переменную, доступную везде. Я не знаю, называете ли вы это в мире .net глобальной переменной или переменной приложения или как-то еще. Но вот как бы я сделал это в Classic ASP.

В классическом ASP у меня был бы файл с именем VarFunct.asp. Это будет файл, в котором я объявляю свои переменные и различные функции, к которым я могу получить доступ из любого места. Я бы включил файл VarFunct.asp на все свои страницы. Во всяком случае, это то, что я действительно пытаюсь сделать (написано так, как я бы сделал это в классическом 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, если нет, установите значение «Все». Как мне это написать? И куда мне его положить?

Когда я создавал веб-сайт с помощью Visual Studio 2012, я выбрал веб-сайт ASP.NET (Razor V2).

Кажется, что это должно быть такой основной фундаментальной задачей любого веб-сайта, на котором есть какое-либо программирование на стороне сервера, но попытка найти информацию и документацию в Интернете практически невозможна, но, вероятно, потому, что я не использую правильные термины для своего вопроса. Я не нашел руководств по Razor, в которых рассказывается о настройке переменных, которые можно использовать глобально на веб-сайте.

Если бы кто-нибудь мог помочь мне здесь, либо сказав мне, что мне нужно сделать, либо указав мне хороший учебник, это было бы здорово.


person Soren    schedule 12.03.2018    source источник
comment
Вы хотите, чтобы эти переменные были уникальными для каждого пользователя или для всего приложения для всех пользователей?   -  person John Wu    schedule 12.03.2018


Ответы (2)


то, что вы ищете, называется Статический класс/участник

Это позволит вам хранить и обмениваться данными для всего приложения.

НО! поскольку веб-сервер является многопоточным, вы не хотели бы этого делать, иначе вы можете столкнуться со случаем, когда данные перезаписываются другим запросом до того, как вы закончите текущий.

Если вам нужно передать данные из контроллера в ваш вид, вы можете использовать ViewBag динамический объект

Если вам нужно использовать данные в другом месте (например, во вспомогательном классе), выполните

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

По сути, это словарь, и каждый запрос будет иметь другой объект Application.

person Steve    schedule 12.03.2018

Есть несколько способов сделать это.

Для вашего примера я бы предположил, что эта конкретная переменная может быть разной для разных пользователей, одновременно использующих приложение. Это скорее область сеанса, чем область приложения.

В этом случае вы можете просто использовать наследование и создать базовый класс модели контроллера и/или базового представления, от которого наследуются все ваши другие контроллеры и/или модели представления. Таким образом, вы можете передавать его туда и обратно между представлением и контроллером и читать/обновлять его, когда вам нужно.

Вы также можете использовать объекты Request и HttpContext и Session, встроенные в asp.net, если они соответствуют вашим потребностям. Краткий обзор некоторых их функций можно найти здесь: https://docs.microsoft.com/en-us/aspnet/web-pages/overview/api-reference/asp-net-web-страницы-api-reference --- поиск в Google конкретных дает массу результатов.

Если вам действительно нужна область приложения, вы, конечно, можете использовать статический класс для использования статических методов. Тогда вам не нужно включать класс в каждый другой класс, но вам нужно будет полностью указать имя метода при его вызове.

Однако я бы не рекомендовал статические переменные на этом уровне. Я не могу представить очень много вещей, которые нужно будет изменить для каждого отдельного пользователя, которых вы бы изменили во время работы экземпляра приложения. Большинство из этих видов элементов, которые мы используем, являются кэшами (обычно это поиск в БД и тому подобное, которые мы не хотим каждый раз извлекать из БД и РЕДКО обновлять). Если вы используете кеши, будьте очень внимательны к безопасности потоков при их обновлении. Вот msdn по кэшированию: https://msdn.microsoft.com/en-us/library/aa478965.aspx --- Или параметры конфигурации приложения, такие как среда приложения. Мы извлекаем большинство из них из файла конфигурации, и они доступны только для чтения, мы не меняем их в работающем экземпляре приложения.

person user7396598    schedule 12.03.2018