1

У меня есть странная проблема с обратной записью DropDownList.Извлечение значений из DropDownList в Postback в asp.net

У меня есть DropDownList в мастер-странице ASP.NET, который содержит некоторые государственные имена, как:

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

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

В коде позади мастер-страницы, у меня есть DropDownList_SelectedInd exChanged, где я устанавливаю 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 в содержании страницы (по умолчанию. ASPX). Я делаю, что, как показано ниже:

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

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

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

ответ

1

Это нормальное поведение. При выборе пункта DROPDOWNLIST, он отправляет обратно, загружает страницу содержимого первой, работает:

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

Здесь Globals.DefaultTown пока не изменится.

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

Эта страница может помочь в понимании лучшего: Events in ASP.NET Master and Content Pages.

РЕШЕНИЕ:

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

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

2.Or вы можете перенаправить на той же странице. В Masterpage:

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 />"); 
} 
+0

привет @afzalulh Пожалуйста, вы можете сказать мне, что может быть возможным решением для этого. – Abbas

+0

См. Мой отредактированный ответ. – afzalulh

+0

привет @afzalulh спасибо за быстрый ответ с ответом, для вашего первого решения у меня уже есть событие selectedindex_changed только на главной странице. вы хотели переместиться на страницу содержания. – Abbas