Список, сохраненный в оболочке сеанса, остается с Count 0, хотя вызывается метод для добавления элемента в него - PullRequest
0 голосов
/ 25 января 2019

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

 public class MySessionWrapper
{
    private MySessionWrapper()
    {

    }
    private static List<DateTime> _Week_1;
    public static List<DateTime> A_Week_1 
    {
        get
        {
            _Week_1 = (List<DateTime>) HttpContext.Current.Session["A_Week_1"];
            if(_Week_1 == null)
            {
                _Week_1 = new List<DateTime>();
            }
            return (List<DateTime>)_Week_1;
        }
    }

    public static void AddWeek1(DateTime add_date)
    {

        A_Week_1.Add(add_date);
    }

}

//and I am calling it from here using something like this 
if (weeknum == 1)
            {
                MySessionWrapper.AddWeek1(date1);
            }

Дело в том, что я заметил, что метод MySessionWrapper.AddWeek1 остается равным 0, хотя есть значения, попадающие в weeknum ==1. Он переходит к классу обертки сессии, который вообще не добавляет значение в список.Мне действительно понадобятся некоторые рекомендации по пониманию сессии с общим списком, и кто-то может указать, что именно я делаю здесь неправильно.

Привет, ребята, я снова отредактировал код так, как указывал Гаурав, но я снова застреваю, на этот раз список уже инициализирован, но с определенным количеством отсчетов в нем.Может быть, я могу лучше объяснить, что я хочу сделать.У меня есть выпадающий список, который содержит месяцы.Таким образом, если пользователь выберет февраль, программа фактически разделит даты в месяце на соответствующие недели, а weekofDay - понедельник.Так, например, в феврале это должно быть

Months -- Week Start Date ---- Week End Date
Week1 - 2/1/2019 12:00:00 AM - 2/3/2019 12:00:00 AM
Week2 - 2/4/2019 12:00:00 AM - 2/10/2019 12:00:00 AM
Week3 - 2/11/2019 12:00:00 AM - 2/17/2019 12:00:00 AM
Week4 - 2/18/2019 12:00:00 AM - 2/24/2019 12:00:00 AM
Week5 - 2/25/2019 12:00:00 AM - 2/28/2019 12:00:00 AM

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

Это как-то связано с сессиями?

1 Ответ

0 голосов
/ 25 января 2019

Я рекомендую переписать ваш метод следующим образом:

public static List<DateTime> A_Week_1 
{
    get
    {
        var week1 = (List<DateTime>)HttpContext.Current.Session["A_Week_1"];
        if(week1 == null)
        {
            week1 = new List<DateTime>();
            HttpContext.Current.Session["A_Week_1"] = week1;
        }
        return week1;
    }
}

Я отказался от private static List<DateTime> _Week_1;, поскольку это бесполезно или не нужно.

Если вам нужно, вы можете добавить установщикметод «сброса» значения:

public static List<DateTime> A_Week_1 
{
    get
    {
        var week1 = (List<DateTime>)HttpContext.Current.Session["A_Week_1"];
        if(week1 == null)
        {
            week1 = new List<DateTime>();
            HttpContext.Current.Session["A_Week_1"] = week1;
        }
        return week1;
    }
    set
    {
            HttpContext.Current.Session["A_Week_1"] = value;
    }
}

Затем вы можете либо сбросить его, установив A_Week_1 = null (тем самым вынуждая получателя создать новый список при следующем обращении к получателю), либо вы можете вручнуюустановите его в новый список (например, A_Week_1 = new List<DateTime>();).

Конечно, вы также можете «сбросить», просто очистив список: A_Week_1.Clear();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...