下拉列表选择更改时丢失FileUpload文本框的值

时间:2010-09-09 11:39:06

标签: c# asp.net

我有一个dropdownlistbox和fileupload控件。从上传控件中选择一个文件后,如果我更改下拉列表值(发生回发),那么我之前选择的文件路径显示为空。 这是我的代码:

<asp:Label ID="lblupload" runat="server" Text="Upload a file: "></asp:Label>                
   <asp:FileUpload ID="upload" runat="server" Width="320" Height="18" BorderColor="Gray" BorderWidth="1" />
   <asp:Label ID="Perimission" runat="server" Text="Perimission"></asp:Label>
   <asp:DropDownList ID="ddlState" runat="server" OnSelectedIndexChanged="ddlState_SelectedIndexChanged" AutoPostBack="true" >
        <asp:ListItem Text="Everybody"  Value="Everybody"></asp:ListItem>
        <asp:ListItem Text="Students"  Value="Students"></asp:ListItem>
        <asp:ListItem Text="Selected Users"  Value="Selected Users"></asp:ListItem>
    </asp:DropDownList>

3 个答案:

答案 0 :(得分:1)

不知道您是否确实需要在下拉列表中使用该自动注册。但清楚它,你没事。在回发期间不会保存FileUpload值。

答案 1 :(得分:1)

以下是您可以使用的快速解决方法:

将ScriptManager添加到您的页面。

将下拉列表放在AJAX UpdatePanel中,并在UpdatePanel中显示按钮和列表框。

这将使下拉列表导致部分异步回发而不是整页回发,因此FileUpload控件将能够保留它的值。

我知道这不是最有效的方法,但这是一个简单的方法,并且对于用户而言在美学上也会更好,因为页面似乎不会因为在下拉列表中选择值而重新加载。

但是,请记住将FileUpload控件保留在UpdatePanel之外,否则FileUpload将无法正常工作。

答案 2 :(得分:0)

FileUpload控件在下一个回发时发布所选文件。因为更改下拉列表会启动回发,所以在更改DropDownList中的另一个项目时会上载文件。

您可以将此代码放入页面加载中来测试:

protected void Page_Load(object sender, EventArgs e)
{
    if (upload.PostedFile != null)
    {
        Response.Write("<p>" + upload.PostedFile.FileName + "</p>");
    }
}