我有一个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>
答案 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>");
}
}