2010-09-09 79 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將不起作用。

相關問題