Переменные сеанса в ASP.NET MVC

Ваш подход:

for x in rem_list:
    num_list.remove(x)

интуитивно понятен, и если списки не будут очень большими, я мог бы сделать это, потому что его легко читать.

Одна альтернатива будет:

result = []
for x in num_list:
    if x in rem_list:
        rem_list.remove(x)
    else:
        result.append(x)

Это будет O (len (rem_list) ^ len (num_list)) и быстрее, чем первое решение, если len (rem_list) < Len (num_list).

Если бы rem_list гарантированно не содержал дубликатов (согласно вашим примерам), вы могли бы вместо этого использовать набор, и сложность была бы O (len (num_list)).

167
задан N30 25 May 2011 в 21:07
поделиться

4 ответа

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

в global.asax сцепляют событие

void OnSessionStart(...)
{
    HttpContext.Current.Session.Add("__MySessionObject", new MySessionObject());
}

OnSessionStart Отовсюду в коде где HttpContext. Текущее свойство! = пустой указатель Вы можете retrive тот объект. Я делаю это с дополнительным методом.

public static MySessionObject GetMySessionObject(this HttpContext current)
{
    return current != null ? (MySessionObject)current.Session["__MySessionObject"] : null;
}

Этот путь Вы можете в коде

void OnLoad(...)
{
    var sessionObj = HttpContext.Current.GetMySessionObject();
    // do something with 'sessionObj'
}
123
ответ дан John Leidegren 23 November 2019 в 21:00
поделиться

Ну, по моему скромному мнению..

  1. никогда не ссылаются на Сессию в Вашей странице
  2. представления/ведущего устройства, минимизируют Ваш useage Сессии. MVC обеспечивает TempData obj для этого, которое является в основном Сессией, которая живет для единственного прохождения в сервер.

Относительно № 1, у меня есть Основное Представление со строгим контролем типов, которое имеет свойство для доступа независимо от того, что объект Сессии представляет.... в моем экземпляре stongly, введенное Основное Представление универсально, который дает мне некоторую гибкость относительно Страниц Представления со строгим контролем типов

ViewMasterPage<AdminViewModel>

AdminViewModel
{
    SomeImportantObjectThatWasInSession ImportantObject
}

AdminViewModel<TModel> : AdminViewModel where TModel : class
{
   TModel Content
}

и затем...

ViewPage<AdminViewModel<U>>
13
ответ дан E Rolnicki 23 November 2019 в 21:00
поделиться

Хотя я не знаю о asp.net mvc, но это - то, что мы должны сделать в нормальном веб-сайте .NET. Это должно работать на asp.net mvc также.

YourSessionClass obj=Session["key"] as YourSessionClass;
if(obj==null){
obj=new YourSessionClass();
Session["key"]=obj;
}

Вы поместили бы эту внутреннюю часть метод для легкого доступа. HTH

7
ответ дан DotNET 23 November 2019 в 21:00
поделиться

Если вы используете asp.net mvc, вот простой способ получить доступ к сеансу.

Из контроллера:

{Controller}.ControllerContext.HttpContext.Session["{name}"]

Из представления:

<%=Session["{name}"] %>

Это определенно не лучший способ получить доступ к переменным сеанса, но это прямой маршрут. Поэтому используйте его с осторожностью (желательно во время быстрого создания прототипа) и используйте Wrapper / Container и OnSessionStart, когда это станет уместным.

HTH

14
ответ дан 23 November 2019 в 21:00
поделиться
Другие вопросы по тегам:

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