Необходимо хранить статическое значение на время запроса. Как? - PullRequest
0 голосов
/ 09 июля 2009

У меня есть приложение ASP.NET MVC. Я пришел к мысли о создании автоинкрементных значений для использования в качестве уникальных идентификаторов элементов. Вопрос в том, как я могу иметь и работать с глобальной переменной, которая должна быть там на время запроса (генерация страницы), но больше нет?

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

Любой вклад высоко ценится.

РЕДАКТИРОВАТЬ: у меня есть несколько помощников HTML, которые могут вызываться из различных представлений и частичных представлений, поэтому объявление переменной на странице и передача ее каждому помощнику, очевидно, не является хорошим решением. Я хочу просто использовать помощников и знать, что все они получают уникальные идентификаторы за кулисами.

Ответы [ 5 ]

1 голос
/ 09 июля 2009

Хорошо, я немного погуглил и нашел решение на форумах ASP.NET.

http://forums.asp.net/t/1401685.aspx

Очевидно, я могу использовать коллекцию HttpContext.Current.Items, чтобы иметь мою небольшую статическую переменную на время запроса.

0 голосов
/ 09 июля 2009

Вы можете создать переменную-член в вашем контроллере, которая будет генерироваться для каждого запроса:

public class ItemController : Controller 
{

    private int _UniqueID = 0;

    public ActionResult Index()  
    {
         foreach (var item in items)
         {
              item.UniqueID = _UniqueID++;
         }
         // etc...
    }
0 голосов
/ 09 июля 2009

Почему бы вам не определить целочисленную переменную в верхней части файла просмотра страницы? Используйте его во время выполнения рендеринга представления, и в конце вы можете легко оставить все как есть. Вам не нужно ничего явно уничтожать. Ваши переменные живут только на время запроса. IIS - это служба без сохранения состояния (если вы вычесть переменные Session, Cache и Application), поэтому он ничего не помнит явно.

0 голосов
/ 09 июля 2009

Я полагаю, вы могли бы использовать методы Application_BeginRequest и Application_EndRequest в global.asax.cs; Примечание. В настоящее время я не могу дважды проверить имена методов, но думаю, что они близки.

0 голосов
/ 09 июля 2009

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

Не беспокойтесь об удалении ключа после каждого запроса. Просто используйте статическое (я думаю, это общее в Visual Basic) целое число, используйте и увеличивайте его каждый раз, когда вам нужно уникальное значение. Также возьмите его мод с невероятно большим числом каждый раз, чтобы убедиться, что он не будет повторно использован в одном запросе и никогда не будет переполнен.

...