在页面加载中,我填充如下的下拉列表:
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;
}
下拉列表包含从我的数据库中获取的树项目,营房,射手范围和稳定。单击按钮时页面加载是否覆盖我的选择?我该如何解决这个问题?
答案 0 :(得分: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();
}
}
答案 1 :(得分:2)
将上面的绑定代码包装在if (!Page.IsPostBack) { }
块中。否则你就失去了控制状态。