2015-06-07 2 views
0

У меня есть приложение C#/ASP.net. Когда пользователь выполняет поиск данных с помощью нескольких стандартных раскрывающихся списков и текстовых полей, я запускаю SQL-запрос, чтобы захватить все параметры поиска пользователей, а затем автоматически заполнять элементы управления на основе возвращаемого. Затем пользователь может выполнить поиск с использованием этих пресетов или изменить любой из вариантов и выполнить поиск снова.Я ищу способ сохранить настройки поиска для пользователя

Проблема заключается в том, что это требует вызова БД при каждой загрузке страницы поиска. Я надеялся, что может быть способ захватить все настройки один раз, когда пользователь войдет в систему в первый раз, а затем сохранит их каким-то образом, чтобы облегчить загрузку на моем SQL-сервере db. Кто-нибудь когда-либо сталкивался с этой проблемой и обнаружил эффективный способ справиться с этим?

+0

вы можете загрузить его после входа пользователя в таблицу данных и сохранить его в сеансе (если он не очень большой) –

+0

@Claies, не ясно ли я сказал в сообщении 'У меня есть C# /ASP.net application' – Rahul

+1

@Claies, это слишком подробно, когда сообщение говорит 'C#/ASP.NET', что я бы подумал, что это' Webform'. Более того, вы можете связать WPF с ASP.NET только тогда, когда вы, вероятно, будете развертывать/размещать свое приложение WPF в браузере, но в этом случае это вообще не ASP.NET. – Rahul

ответ

2

Как использовать старые лакомства - Cookies?

HttpCookie aCookie = new HttpCookie("SearchPreferences"); 
aCookie.Values = /* your collection of preferences */; 
aCookie.Expires = /* DateTime of expiration */; 
Response.Cookies.Add(aCookie); 

... или сеансы, которые вы уничтожите, когда пользователь выйдет из системы?

if (Session["SearchPreferences"] != null) { 
    /* loading the preferences */ 
} else { 
    /* preferences are already loaded */ 
} 

Вы также можете установить их срок действия с помощью Session.TimeOut.

Edit:

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

System.Web.Caching.Cache выглядит как самый современный и быстрый способ сделать это.

Cache c = System.Web.Caching.Cache(); 
c.Add(key, value, dependencies, absoluteExpiration, 
     slidingExpiration, priority, onRemoveCallback); 

Однако, есть еще вариант ApplicationState, который является объектом, который может держать ваши ценности в то время как приложение работает.

+1

@Claies Тег ASP.NET на вопрос дает мне понять, достаточно для меня. – user35443

+1

@Claies, где OP упомянул, что это приложение «Winform» ??? – Rahul

+0

Файлы cookie немного проблематичны, так как не все браузеры поддерживают их, а те, которые содержат возможность отключить их. Кроме того, если память используется, они очень ограничены в пространстве для хранения. В противном случае я не понимаю, почему не использовать файлы cookie для веб-приложения. –

1

Если вы ищете постоянную на стороне клиента, Cookies и Sessions (которые по-прежнему зависят от файлов cookie на клиенте, если только cookieless) является одним из вариантов (см. Предыдущий ответ). Вы также можете изучить более новые параметры client side persistence (где Web Storage имеет большую поддержку в браузерах). Hth ...

+0

Впервые я услышал о 'Web Storage'. Новая вещь для меня. – Rahul

+0

@Rahul это довольно круто - больше данных, и поскольку это ключ/ценность, кривая обучения не много - хотя, как и все остальное, с такой силой приходит ответственность :) – EdSF

Смежные вопросы