Я поместил их непосредственно в образцовый класс, как так:
class MyClass < ActiveRecord::Base
ACTIVE_STATUS = "active"
INACTIVE_STATUS = "inactive"
PENDING_STATUS = "pending"
end
Затем при использовании модели от другого класса, я ссылаюсь на константы
@model.status = MyClass::ACTIVE_STATUS
@model.save
TempData
длится до следующего запроса, как уже отмечалось.
Но есть также два других словаря, привязанных к одному запросу.
Контроллер
, ViewPage
} .ViewData
Context.Items
Для связи от контроллера к (главной) странице ViewData
, вероятно, лучший выбор.
Используйте HttpContext.Items
- хранилище кеша для каждого запроса. Прочтите эту статью на сайте 4guysfromrolla для получения дополнительных сведений.
Она должна нормально работать в ASP.NET MVC. Возможно, вы захотите получить свою главную страницу из базового класса (либо с помощью кода программной части, либо с помощью директивы Inherits) и иметь защищенный метод в базовом классе, который проверяет HttpContext.Items и возвращает, например, true / false в зависимости от того, хотите ли вы отобразить условный код.
Two approaches come to mind:
I would probably go with 1).
The common way to access data in a MasterPage that is set in Controller (Action) is via ViewData["TheDataKey"] = "SomeValue".
Это относительно просто, и есть несколько способов сделать это - в зависимости от того, как работает ваш сайт.
Я интерпретирую ваш запрос как то, что вам нужна собственность или переменная, которая существует на время запроса и видна контроллеру, модели и мастеру.
Статическое свойство отображается текущему приложению в ASP, что означает загрузку пользователей, подключающихся одновременно, но не обязательно все. IIS будет порождать новые приложения ASP по мере необходимости.
Итак, способы, которыми вы можете это сделать:
Вы можете иметь собственный базовый класс для своей главной страницы или страницы с выделенным кодом (поскольку все элементы WebForms по-прежнему работают )
У вас может быть собственный базовый класс для ваших контроллеров.
Вы можете получить один из другого, так что:
Вы изучили tempData , прикрепленную к классу контроллера? это простой словарь, который сохраняет свое значение с помощью одного единственного запроса. Это означало бы, что к вашим данным можно получить доступ только в контроллере, но это не должно быть проблемой.
public class MyController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult MyAction(string id)
{
this.TempData["Message"] = "YourData";
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MyAction(string Id)
{
var myData = this.TempData["Message"];
}
}
Это работает для меня. Я использую его только для отображения предупреждений и тому подобного.