我确信这很简单(整晚都在和女儿一起玩!)我的下拉列表总是返回0:
<p>
<asp:DropDownList ID="ddlSelectVenue" AppendDataBoundItems="true" CssClass="small-dropdownlist" DataTextField="SiteName" DataValueField="SiteName" runat="server">
<asp:ListItem Text="-- select --" Value="0"></asp:ListItem>
</asp:DropDownList>
</p>
以下是填充它的代码:
for (int i = 0; i < dArray.Length; i++)
{
ddlSelectVenue.Items.Add(new ListItem(dArray[i]["SiteName"].ToString(),dArray[i]["SiteName"].ToString()));
}
它确实包含值,这是页面源的片段:
<select name="ctl00$ddlSelectVenue" id="ctl00_ddlSelectVenue" class="small-dropdownlist">
<option value="0">-- select --</option>
<option value="Admiral Duncan - London">Admiral Duncan - London</option>
<option value="Anchor - Bristol">Anchor - Bristol</option>
<option value="Assembly - Preston">Assembly - Preston</option>
</select>
这是Go按钮HTML:
<asp:ImageButton ID="imbGo" ImageUrl="~/img/GoButton.png" OnClick="imbGo_Click" runat="server" />
这是imbGo_Click(很好的一部分):
protected void imbGo_Click(object sender, EventArgs e)
{
switch(ddlSelectVenue.SelectedValue)
{
case "Admiral Duncan - London":
Response.Redirect("http://www.welovetolisten.co.uk?unitcode=5004&FROMWEBSITE=1");
break;
case "Anchor - Bristol":
Response.Redirect("http://www.welovetolisten.co.uk?unitcode=3010&FROMWEBSITE=1");
break;
// ...
}
}
默认情况下总是爆炸:正如我所说,这可能是显而易见的原因,但我只是没有看到它!
修改
我已经用它解决了这个问题,但是我会接受第一个说回发帖的人,因为那是问题,我不明白的是我使用了之前已经填充在PageLoad上的下拉列表。没有这种问题。
无论如何,我在下拉列表中设置了一个cookie,改为使用jQuery:
$('.small-dropdownlist').change(function () {
var info = $('.small-dropdownlist option:selected').text();
$.cookie("FeedbackVenue", info);
});
然后在Go按钮上阅读cookie:
if(Request.Cookies["FeedbackVenue"] != null)
{
venue = Request.Cookies["FeedbackVenue"].Value;
}
switch(venue.Replace("%20"," "))
现在可行。
谢谢大家。
答案 0 :(得分:0)
检查您是否未在DropDownList
重新绑定PostBack
。
答案 1 :(得分:0)
检查你是否没有在PostBack上重新绑定DropDownList并查看这篇文章http://evonet.com.au/dropdownlist1-has-a-selectedvalue-which-is-invalid-because-it-does-not-exist-in-the-list-of-items/
答案 2 :(得分:0)
如果您对下拉列表进行数据处理而不是以编程方式添加项目,它是否有效?
ddlSelectVenue.DataSource = dArray;
您已经设置了DataTextField
和DataValueField
。但是,如果有人错过了,我也会添加它:
ddlSelectVenue.DataTextField="SiteName";
ddlSelectVenue.DataValueField="SiteName";
ddlSelectVenue.DataBind();
您还必须确保每次回发都不会重新填充下拉列表,因为这会阻止事件,并且所有更改/选择都将被撤消。
所以(例如在Page_Load
中):
if(!IsPostBack)
{
// DataBindDropDown();
}
答案 3 :(得分:0)
在哪里放置命令以填充下拉列表?
我做
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.ddlSelectVenue.Items.Add(new ListItem("Admiral Duncan - London", "Admiral Duncan - London"));
}
}
然后,在我的按钮点击事件上
protected void Button1_Click(object sender, EventArgs e)
{
string value = this.ddlSelectVenue.SelectedValue;
}
该值等于“Admiral Duncan - London”