1

我敢肯定这很简单(和正在出牙的女儿一起熬夜!)我的下拉列表总是返回 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 上填充的下拉列表,但没有这个之类的问题。

无论如何,我已经在使用 jQuery 更改的下拉列表中设置了一个 cookie:

$('.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"," "))

现在它起作用了。

感谢大家。

4

4 回答 4

0

检查您是否不重新绑定DropDownListPostBack

于 2013-05-24T11:32:34.843 回答
0

检查您是否没有在 PostBack 上重新绑定 DropDownList 并查看这篇文章http://evonet.com.au/dropdownlist1-has-a-selectedvalue-which-is-invalid-because-it-does-not-exist-in-项目列表/

于 2013-05-24T11:33:59.433 回答
0

如果您对下拉列表进行数据绑定而不是以编程方式添加项目,它会起作用吗?

ddlSelectVenue.DataSource = dArray; 

您已经设置了DataTextFieldand DataValueField。但是,如果有人错过它,我也会添加它:

ddlSelectVenue.DataTextField="SiteName";
ddlSelectVenue.DataValueField="SiteName";

ddlSelectVenue.DataBind();

您还必须确保在每次回发时都不会重新填充下拉列表,因为这会阻止事件发生并且所有更改/选择都将被撤消。

所以(例如在Page_Load):

if(!IsPostBack)
{
    // DataBindDropDown();
}
于 2013-05-24T11:36:03.857 回答
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”

于 2013-05-24T11:43:26.490 回答