ASP.net MVC - ограниченная по объему запросом глобальная переменная

Я поместил их непосредственно в образцовый класс, как так:

class MyClass < ActiveRecord::Base
  ACTIVE_STATUS = "active"
  INACTIVE_STATUS = "inactive"
  PENDING_STATUS = "pending"
end

Затем при использовании модели от другого класса, я ссылаюсь на константы

@model.status = MyClass::ACTIVE_STATUS
@model.save
11
задан Palantir 29 September 2009 в 12:50
поделиться

6 ответов

TempData длится до следующего запроса, как уже отмечалось.

Но есть также два других словаря, привязанных к одному запросу.

  • { Контроллер , ViewPage } .ViewData
  • Context.Items

Для связи от контроллера к (главной) странице ViewData , вероятно, лучший выбор.

10
ответ дан 3 December 2019 в 01:39
поделиться

Используйте HttpContext.Items - хранилище кеша для каждого запроса. Прочтите эту статью на сайте 4guysfromrolla для получения дополнительных сведений.

Она должна нормально работать в ASP.NET MVC. Возможно, вы захотите получить свою главную страницу из базового класса (либо с помощью кода программной части, либо с помощью директивы Inherits) и иметь защищенный метод в базовом классе, который проверяет HttpContext.Items и возвращает, например, true / false в зависимости от того, хотите ли вы отобразить условный код.

24
ответ дан 3 December 2019 в 01:39
поделиться

Two approaches come to mind:

  1. Create a base controller where you set this variable, and then have all your controllers inherit from that.
  2. Use TempData - the problem here being that it sticks around for the next request. But maybe knowing that, you can work around it by using a GUID key to determine that you are, in fact, getting a new value when you need it.

I would probably go with 1).

2
ответ дан 3 December 2019 в 01:39
поделиться

The common way to access data in a MasterPage that is set in Controller (Action) is via ViewData["TheDataKey"] = "SomeValue".

1
ответ дан 3 December 2019 в 01:39
поделиться

Это относительно просто, и есть несколько способов сделать это - в зависимости от того, как работает ваш сайт.

Я интерпретирую ваш запрос как то, что вам нужна собственность или переменная, которая существует на время запроса и видна контроллеру, модели и мастеру.

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

Итак, способы, которыми вы можете это сделать:

Вы можете иметь собственный базовый класс для своей главной страницы или страницы с выделенным кодом (поскольку все элементы WebForms по-прежнему работают )

У вас может быть собственный базовый класс для ваших контроллеров.

Вы можете получить один из другого, так что:

1
ответ дан 3 December 2019 в 01:39
поделиться

Вы изучили 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"];
  }
}

Это работает для меня. Я использую его только для отображения предупреждений и тому подобного.

0
ответ дан 3 December 2019 в 01:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: