Получение значений из DropDownList при обратной передаче в asp.net

У меня странная проблема с обратной передачей DropDownList.

У меня есть DropDownList на главной странице asp.net, которая содержит некоторые имена состояний, такие как:

  1. Текст [NewYork] - Значение [0]
  2. Текст [Нью-Джерси] - Значение [1]

drpTowns.DataSource = objTown.GetAllStates();
drpTowns.DataTextField = "Name";
drpTowns.DataValueField = "Id";
drpTowns.DataBind();

В коде главной страницы у меня есть событие DropDownList_SelectedIndexChanged, где я устанавливаю SelectedValue раскрывающегося списка в переменной, которая содержит сеанс. как ниже

protected void drpTowns_SelectedIndexChanged(object sender, EventArgs e)
{
    Globals.DefaultTown = Convert.ToInt32(drpTowns.SelectedValue);
}

Определение для Globals.DefaultTown написано в классе App_Code Globals.cs, как показано ниже:

 private static int _defaultTown = Convert.ToInt32(ConfigurationManager.AppSettings["DefaultTown"]);

public static int DefaultTown
{
    get
    {
        if (HttpContext.Current.Session["DefaultTown"] == null)
            return _defaultTown;
        else
            return Convert.ToInt32(HttpContext.Current.Session["DefaultTown"]);
    }
    set
    {
        HttpContext.Current.Session["DefaultTown"] = value;
    }
}

Теперь я хочу получить значение Globals.DefaultTown на странице содержимого (Default.aspx). Я делаю это, как показано ниже:

Response.Write("Default Town Is: " + Globals.DefaultTown + "<br />");

Теперь всякий раз, когда я выбираю состояние из выпадающего списка, Globals.DefaultTown не обновляется сразу, как по умолчанию для выбранного состояния установлено значение DefaultTown, но когда я выбираю второе состояние из списка, он по-прежнему дает идентификатор первого состояния, теперь когда я выбираю третье состояние из списка, он дает идентификатор второго, а когда я выбираю первое состояние из списка, он дает идентификатор третьего состояния, то есть он не обновляет переменную DefaultTown на месте.

Может кто-нибудь сказать мне, что будет не так для этого

1 ответ

Решение

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

Response.Write("Default Town Is: " + Globals.DefaultTown + "<br />");

Здесь Globals.DefaultTown еще не изменился.

Затем он переходит к методу rpTowns_SelectedIndexChanged и изменяет Globals.DefaultTown.

Эта страница может помочь лучше понять: События в ASP.NET Master и Content Pages.

РЕШЕНИЕ:

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

protected void drpTowns_SelectedIndexChanged(object sender, EventArgs e)
{
    Globals.DefaultTown = Convert.ToInt32(drpTowns.SelectedValue);
    Response.Write("Default Town Is: " + Globals.DefaultTown + "<br />");
}

2. Или вы можете перенаправить на ту же страницу. На главной странице:

protected void drpTowns_SelectedIndexChanged(object sender, EventArgs e)
{
    Globals.DefaultTown = Convert.ToInt32(drpTowns.SelectedValue);
    Response.Redirect(Request.RawUrl);
}

На странице содержимого:

if (!IsPostBack)
{
    Response.Write("Default Town Is: " + Globals.DefaultTown + "<br />");
}
Другие вопросы по тегам