我正在尝试检索以前数据绑定的DropDownList上的值,如下所示:
<asp:DropDownList ID="DropDownListReception" runat="server" CssClass="span3 drop-down-reception"
OnPreRender="DropDownListReception_PreRender" OnSelectedIndexChanged="DropDownListReception_SelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>
protected void Page_Load(object sender, EventArgs e)
{
var receptions = BLLFactory.ReceptionBLL.GetListAll();
DropDownListReception.DataSource = receptions;
DropDownListReception.DataBind();
}
在DropDown PreRender上,我正在个性化这个DropDown:
protected void DropDownListReception_PreRender(object sender, EventArgs e)
{
if (DropDownListReception.DataSource != null)
{
DropDownListReception.Items.Clear();
DropDownListReception.Items.Add(new ListItem("-- Select --", "NA"));
foreach (Reception item in (DropDownListReception.DataSource as IEnumerable))
{
DropDownListReception.Items.Add(new ListItem(item.Name + " " + item.Number, item.Id.ToString()));
}
}
}
这是完美的,我的DropDown加载它应该,我的问题是当我尝试在SelectedIndexChanged事件中检索SelectedValue时,它不会将值作为字符串返回但作为一种类型,我正在做的是:< / p>
protected void DropDownListReception_SelectedIndexChanged(object sender, EventArgs e)
{
//CurrentReception is a string i want to save in ViewState
//I also tried (sender as DropDownList).SelectedValue
//Tried DropDownListReception.SelectedValue
CurrentReception = DropDownListReception.SelectedItem.Value;
}
但是这个“DropDownListReception.SelectedItem.Value”将始终返回“Reception”,它是项目的类型,而不是我在PreRender事件中指定为id值的id。如果我这样做也会发生这种情况:“DropDownListReception.SelectedItem.Text”,这也会返回“接收”。如何返回分配给DropDown项的字符串值?
答案 0 :(得分:0)
var CurrentReception = DropDownListReception.SelectedItem as Reception;
string val = CurrentReception.PropertyYouNeed;
答案 1 :(得分:0)
DropDownListReception.SelectedItem.Text和DropDownListReception.SelectedItem.Value将返回选择的值,这是将ListItem添加到列表时使用的ListItem中的第二个术语。换句话说,问题在于item.Id.ToString()。它返回对象的类型而不是ID。我不确定你的物品实际上是由什么构成的,所以我不确定你真正需要什么,但你确定它不仅仅是item.Id? ToString()通常是对象的字符串表示,如果item.Id是一个int,那么ToString应该给你相当于该int的字符串...但是它不起作用的事实表明item.Id实际上并不是一个int。
答案 2 :(得分:0)
我想通了,我在PageLoad上的DataBinding DropDownList,它在SelectedIndexChanged事件之前触发。由于DropDown在其值发生变化时执行PostBack,因此PageLoad是&#34;正在重新创建&#34;在获取SelectedIndexChanged代码之前,DropDown和i正在丢失更改。
谢谢大家的答案。:)
答案 3 :(得分:0)
我认为您需要将列表项强制转换为您存储在其中的类型(接收),然后从您想要的Reception对象访问该属性(从您的描述中听起来就像您想要id)。像这样:
protected void DropDownListReception_SelectedIndexChanged(object sender, EventArgs e)
{
//CurrentReception is a string i want to save in ViewState
CurentReception = ((Reception)DropDownListReception.SelectedItem).Id.ToString();
}