【问题标题】:c# postback dropdownlist always choose first valuec# postback dropdownlist 总是选择第一个值
【发布时间】:2013-05-17 15:52:57
【问题描述】:

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

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>

【问题讨论】:

  • 是ajax面板中的下拉列表控件吗?
  • 不确定你的意思......如果你的意思是我从 ajax 选项卡中拖动下拉列表,那么不......对不起,我是新手。
  • :你使用ajax控件上传了吗?如果使用了,下拉列表控件和文件上传控件必须在同一个ajax更新面板中。
  • 是的,我使用 ajax 上传。抱歉,更新面板是什么意思?
  • 对此有任何帮助~请:)

标签: c#


【解决方案1】:

DropListActivity.SelectedItem.ToString 应该可以解决问题。您还应该记住其他一些事项:

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

  2. 只有在 包含下拉列表控件的页面被回发。即如果 您正在使用更新面板您的下拉列表应该存在 在该面板中,或者如果您要回发整个页面,那么只要您满足第一个条件,就不会有任何问题。

  3. 您的事件处理程序dropListActivity_SelectedIndexChanged 将 当一个页面被回发并且选择的索引时总是被触发 已经改变。事件处理程序dropListActivity_SelectedIndexChanged 将在page_load subroutine 执行后被调用。

【讨论】:

    【解决方案2】:

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

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

    您在 dropListActivity_SelectedIndexChanged

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

    你在dropTask();之后调用的那个

    请参考this post's answer

    【讨论】:

    • 您好,感谢您的帮助,感谢您的帮助,但 ListIem 存在错误 -> 无法将类型“System.Web.UI.WebControls.ListItem”隐式转换为“字符串”
    • 这不是确切的代码,我希望你能明白。例如,您可以使用 SelectedItem.ToString(),如果您愿意,也可以存储 SelectedItemIndex。
    • 对不起,我学得慢,逻辑/想法在我身上没有正确流动……请多多指教:)
    【解决方案3】:

    在 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();
    }
    

    【讨论】:

    • 这会以某种方式删除我从 db 填充的下拉列表中的所有数据
    • 是回发或否的下拉绑定。它不应该从下拉列表中删除元素。
    • 我发布了代码,它在 (!Page.IsPostBack) 中,即使我把它放在回发之外并在页面加载中,问题仍然存在
    猜你喜欢
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多