2010-09-09 224 views
1

我有一个dropdownlistbox和fileupload控件。从上传控件中选择一个文件后,如果我更改下拉列表值(回发发生),则选择较早的文件路径显示为空。 这里是我的代码:当下拉列表选择发生变化时丢失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

这是一个安全thingie。文本框通过添加value =“...”属性来维护其状态,但文件上传不应该允许这样做,因为可以在用户的​​计算机上指定文件。然后,您可以添加一千个文件上传文件,随机猜测通用Cookie容器的路径,并通过自动回送来抓取它们。不是你想要的东西。 – sisve 2010-09-09 13:37:57

回答

1

不知道如果你真的需要在下拉列表是自动回。但清除它,你没事。在回发期间不会保存FileUpload值。

+0

如果dropdownlistbox的值是选中的用户,那么我显示2个按钮控件和2个列表框控件,这些控件在页面加载时没有显示 – Abhimanyu 2010-09-09 11:59:06

+0

可能想要做那个客户端;已经建立了按钮和列表框控件(runat =“server”)并使用javascript显示它们 – riffnl 2010-09-09 12:37:43

0

FileUpload控件在下一个回传中发布所选文件。由于更改下拉菜单会启动回传,因此在更改DropDownList中的其他项时会上传文件。

你可以把这个代码在你的页面加载测试:

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

这里有一个快速的解决方法,你可以使用:

添加一个ScriptManager到网页上。

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

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

我知道这不是最有效的方式,但它是一个简单的方法,并且对用户来说更美观,因为页面看起来不会因为在下拉列表中选择一个值而重新加载。

但是,请记住保持FileUpload控件在UpdatePanel之外,否则FileUpload将不起作用。

相关问题