DropDownList没有价值

时间:2013-05-24 11:27:31

标签: c# asp.net

我确信这很简单(整晚都在和女儿一起玩!)我的下拉列表总是返回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"," "))

现在可行。

谢谢大家。

4 个答案:

答案 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; 

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

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”