Question

I have a simple form with a dropdown list binded to a string array (as a simple example). The form is submitted when the user clicks a button.

I want to query the selected item in the list. I read the SelectedValue member of the dropdownlist which always contains the default item no matter what I select in the form.

I can't use autopostback on the list as in my production environment the form is displayed in dynamic div using jquery.

If I remove the binding and add the list items in the asp file using ListItems tags, than it magically works.

My sample asp code:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        <asp:DropDownList ID="DropDownList1" runat="server">
        </asp:DropDownList>
        <br />
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />

    </div>
    </form>
</body>
</html>

And the code-behind file:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string[] items = { "bindItem1", "bindItem2", "bindItem3" };
        DropDownList1.DataSource = items;
        DropDownList1.DataBind();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string text = TextBox1.Text;
        string item = DropDownList1.SelectedValue;
    }
}
Was it helpful?

Solution

In the page_load do the databinding only if Page.IsPostBack==False.

    if (!IsPostBack)
    {
        //do the data binding
    }

Your code now on every page load, will bind the data again and again, so the selected value is "not" changing.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top