2012-03-27 1 views
3

В PageLoad я заселить DropDownList так:Текст от выбранного элемента DropDownList asp.net

protected void Page_Load(object sender, EventArgs e) 
    { 
     string buildingTypeSoldier = "soldier"; 
     var soldierBuilding = from b in dc.Buildings 
           where b.buildingtype == buildingTypeSoldier 
           select b.buildingname; 
     ddlSoldierBuildings.DataSource =soldierBuilding; 
     ddlSoldierBuildings.DataBind(); 
    } 

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

protected void btnBuySoldierBuilding_Click(object sender, EventArgs e) 
    { 
     lblTestlabel.Text = ddlSoldierBuildings.SelectedItem.Text; 
    } 

DropDownList содержит элементы дерева, казармы, шутеры диапазон и стабильные, что я получаю от моей базы данных. Перезагружается ли загрузка страницы, когда я нажимаю кнопку? Как я могу это решить?

ответ

3

Это потому, что ваш Page_Load стреляет перед вашим обработчиком событий.

Оберните логику инициализации Page_Load внутри блока if, где вы проверяете, обрабатывает ли ваша страница обратную передачу или нет, проверив Page.IsPostback property. Если это обратная передача, тогда ваша логика инициализации не будет запускать и сбросить ваш выпадающий список.

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostback){ 
     string buildingTypeSoldier = "soldier"; 
     var soldierBuilding = from b in dc.Buildings 
           where b.buildingtype == buildingTypeSoldier 
           select b.buildingname; 
     ddlSoldierBuildings.DataSource =soldierBuilding; 
     ddlSoldierBuildings.DataBind(); 
     } 
    } 
+0

Отлично, это работает. Большое спасибо за такой быстрый ответ! – Twistar

2

Оберните код пересылки выше в блоке if (!Page.IsPostBack) { }. Иначе вы теряете свое контрольное состояние.