c#回发下拉列表总是选择第一个值

本文关键字:选择 第一个 下拉列表 | 更新日期: 2023-09-27 18:14:06

我想插入下拉列表的选定项目到数据库中,但我的下拉列表保持返回第一个选项。自动回发为false。代码:

dropTask() =从数据库中填充的下拉列表。

        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;
    }

我已经检查了从下拉列表返回的值使用标签:

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

            Label1.Text = filepathImage;
        }
    }

标签文本显示下拉列表值的第一个选项,而不是我选择的选项。请给我点化一下。

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>

c#回发下拉列表总是选择第一个值

DropListActivity.SelectedItem.ToString应该能做到这一点。还有一些你应该记住的事情:

  1. 确保你没有在回发时填充下拉列表

  2. 所选值仅在服务器上可用,如果部分包含下拉列表控件的页面被发回你正在使用一个更新面板,你的下拉列表应该出现

  3. 如果你满足第一个标准,那么你将不会有任何问题。您的事件处理程序dropListActivity_SelectedIndexChanged将总是在页面被发布回来并选定索引时被触发已经改变了。事件处理程序dropListActivity_SelectedIndexChanged将在page_load subroutine执行后被调用。

我假设您需要这样的内容:

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

dropListActivity_SelectedIndexChanged

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

dropTask();

之后调用

请参考这篇文章的答案

dropListActivity_SelectedIndexChanged事件do like

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

和在加载或数据绑定下拉列表事件写

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