Текст из выбранного элемента в DropDownList asp.net - PullRequest
3 голосов
/ 27 марта 2012

При загрузке страницы я заполняю выпадающий список следующим образом:

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;
    }

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

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

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

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

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();
       }
    }
2 голосов
/ 27 марта 2012

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

...