user2376998
user2376998

Reputation: 1071

c# postback dropdownlist always choose first value

I want to insert the selected item of drop down list into database but my drop down list keep returns the first option . auto post back is false . codes here :

dropTask() = drop down list where I populate it from database.

        protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            dropTask();
        }


    }

    protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
    {


        String pathdirectory = (dropListActivity.SelectedItem.Text+"/");
        String filepathImage = (pathdirectory + e.FileName);

        EnsureDirectoriesExist(pathdirectory);

        AjaxFileUpload1.SaveAs(Server.MapPath(filepathImage));


        Session["filepathImage"] = filepathImage;

    }

i had checked the value return from drop down list using label :

   protected void btnDone_Click(object sender, EventArgs e)
    {
        if (Session["filepathImage"] != null)
        {
            string filepathImage = Session["filepathImage"] as string;


            Label1.Text = filepathImage;

        }

    }

the label text show the first option of the drop down list value instead of the choice I have chosen . Please enlighten me on this .

ASPX:

<tr>
    <td>
        <h2>Upload your Story!</h2>
        <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
        </asp:ToolkitScriptManager>

    </td>
</tr>

<tr>
<td colspan = "2"></td>
</tr>

<tr>
    <td>
        <b>Select Activity:</b>
    </td>
    <td> 

        <asp:DropDownList ID="dropListActivity" runat="server" 
            onselectedindexchanged="dropListActivity_SelectedIndexChanged">
        </asp:DropDownList>


    </td>

</tr>

<tr>
<td colspan = "2"></td>
</tr>

<tr>
    <td>
        <b>Story Title:</b>
    </td>
    <td>
        <asp:TextBox ID="txtStoryTitle" runat="server" 
            ontextchanged="txtTitle_TextChanged" AutoPostBack="True"></asp:TextBox>
    </td>
</tr>

<tr>
    <td class="style1">
          <b>Upload your files here:</b><br />
          Multiple Images and 1 Audio file only.
    </td>
    <td class="style1">
        <asp:AjaxFileUpload ID="AjaxFileUpload1" runat="server" 
            onuploadcomplete="AjaxFileUpload1_UploadComplete" 
             /> 
    </td>
</tr>

<tr>
<td colspan = "2"></td>
</tr>

<tr>
    <td>
        <asp:Label ID="Label1" runat="server" ></asp:Label>
    </td>

    <td>
        <asp:Button ID="btnDone" runat="server" Text="Done" onclick="btnDone_Click" />
    </td>
</tr>

Upvotes: 2

Views: 5387

Answers (3)

thunderbird
thunderbird

Reputation: 2733

DropListActivity.SelectedItem.ToString should do the trick. There are a few other things you should keep in mind:

  1. Make sure you are not populating the dropdownlist on a postback.

  2. Selected value will only be available at the sever if the portion of the page containing the dropdownlist control is posted back.i.e if you are using an update panel your dropdownlist should be present within that panel or if you are posting back the entire page then there wont be any problem at all provided you meet the first criteria.

  3. Your event handler dropListActivity_SelectedIndexChanged will always be fired when a page is posted back and the seleceted index has changed. The event handler dropListActivity_SelectedIndexChanged will be called after the page_load subroutine is executed.

Upvotes: 2

Qasim Javaid Khan
Qasim Javaid Khan

Reputation: 660

in dropListActivity_SelectedIndexChanged event do like

if(dropListActivity.Items.Count > 0)
{
    ViewState["DropDownSelectedValue"] = dropListActivity.Item.SelectedValue;
}

and on Load or databind of drop down list event write

if(ViewState["DropDownSelectedValue"] != null && dropListActivity.Items.Count > 0)
{
    dropListActivity.SelectedValue = ViewState["DropDownSelectedValue"].ToString();
}

Upvotes: 0

insomnium_
insomnium_

Reputation: 1820

I assume you need something like:

private void SaveSelected()
{
    ViewState["SelectedItem"] = dropListActivity.SelectedItem;
}

which you use on dropListActivity_SelectedIndexChanged and

private void LoadSelected()
{
   if (ViewState["SelectedItem"] != null)
        dropListActivity.SelectedItem = (ListItem)ViewState["SelectedItem"];
}

which you call after dropTask();

Please, refer to this post's answer

Upvotes: 0

Related Questions