2

我想将下拉列表的选定项目插入数据库,但我的下拉列表保留返回第一个选项。自动回发是假的。这里的代码:

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>
4

3 回答 3

2

DropListActivity.SelectedItem.ToString应该做的伎俩。还有一些其他的事情你应该记住:

  1. 确保您没有在回发中填充下拉列表。

  2. 仅当包含下拉列表控件的页面部分被回发时,选定的值才会在服务器上可用。即,如果您使用更新面板,您的下拉列表应该出现在该面板中,或者如果您回发整个页面,则在那里只要您满足第一个标准,就不会有任何问题。

  3. dropListActivity_SelectedIndexChanged当页面被回发并且所选索引发生更改时,您的事件处理程序将始终被触发。事件处理程序dropListActivity_SelectedIndexChanged将在page_load subroutine执行后调用。
于 2013-05-17T07:29:34.850 回答
0

我假设你需要类似的东西:

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

您使用的dropListActivity_SelectedIndexChanged

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

你打电话后dropTask();

请参考这篇文章的答案

于 2013-05-17T07:11:08.797 回答
0

在 dropListActivity_SelectedIndexChanged 事件中做喜欢

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

并在下拉列表事件写入的加载或数据绑定上

if(ViewState["DropDownSelectedValue"] != null && dropListActivity.Items.Count > 0)
{
    dropListActivity.SelectedValue = ViewState["DropDownSelectedValue"].ToString();
}
于 2013-05-17T07:20:13.617 回答