2013-04-24 55 views
0

我需要我的網絡系統的用戶做上傳(最多4個)。試圖動態asp:FileUpload,刷新故障

上傳本身其工作,但我不希望所有的盒子在開始,所以試圖隱藏第二,第三和第四上傳框,直到用戶需要他們。

這裏的ASPX代碼部分

<fieldset> 
    <div class="frm tam"> 
    </div> 
    <div class="lin"> 
     <asp:FileUpload ID="FileUpload1" runat="server" /></div> 
    <div class="lin"> 
     <asp:FileUpload ID="FileUpload2" runat="server" Visible="false" /></div> 
    <div class="lin"> 
     <asp:FileUpload ID="FileUpload3" runat="server" Visible="false" /></div> 
    <div class="lin"> 
     <asp:FileUpload ID="FileUpload4" runat="server" Visible="false" /></div> 
    <div class="lin"> 
     <asp:Button ID="btnUpload" runat="server" Text="Upload"OnClick="btnUpload_Click" /> 
     <asp:Button ID="btnAdd" runat="server" Text="ADD File" OnClick="btnAdd_Click" /> 
     <asp:Button ID="btnRem" runat="server" Text="Remove File" OnClick="btnRem_Click" /> 
    </div> 
</fieldset> 

和後面的代碼顯示和隱藏的箱子

protected void btnAdd_Click(object sender, EventArgs e) 
{ 
    if (FileUpload2.Visible == false) 
    { 
     FileUpload2.Visible = true; 
    } 
    else if (FileUpload3.Visible == false) 
    { 
     FileUpload3.Visible = true; 
    } 
    else if (FileUpload4.Visible == false) 
    { 
     FileUpload4.Visible = true; 
    } 
} 

protected void btnRem_Click(object sender, EventArgs e) 
{ 
    if (FileUpload4.Visible == true) 
    { 
     FileUpload4.Visible = false; 
    } 
    else if (FileUpload3.Visible == true) 
    { 
     FileUpload3.Visible = false; 
    } 
    else if (FileUpload2.Visible == true) 
    { 
     FileUpload2.Visible = false; 
    } 
} 

,當我在添加文件點擊,新的框出現,但選擇的文件路徑其他的盒子被清除。我可以避免這種情況嗎?

*編輯:我使用網絡框架4.0。

回答

0

該文件在回發中丟失。或者,您可以通過JavaScript實現該功能

<div id="div1"> 
    <asp:FileUpload ID="FileUpload1" runat="server" /> 
</div> 

<div id="div2" style="display:none"> <!-- visibility:hidden --> 
    <asp:FileUpload ID="FileUpload2" runat="server" /> 
</div> 

<div id="div3" style="display:none"> 
    <asp:FileUpload ID="FileUpload3" runat="server" /> 
</div> 

<div id="div4" style="display:none"> 
    <asp:FileUpload ID="FileUpload4" runat="server" /> 
</div> 

然後將每個FileUpload控件放在每個div中。

<input type="button" valud="Add" onclick="addControls()" /> 

然後用JavaScript來使其可見

function addControls() 
{ 
    document.getElementById('div2').style.display = 'inline-block'; 
    //$('#div2').show(); <--- JQuery 
} 
+0

謝謝你的人,這是真的很有幫助。 – 2013-04-24 14:24:49

0

這個值丟失這裏的問題是,上傳文件的工作方式略有不同,以最輸入控件...

不是張貼輸入文件路徑值,它實際上張貼在回發的文件內容,以便 。

在我看來,像你最好的選擇是在客戶端上用javascript做些事情來顯示/隱藏這些上傳控件。這也將是更好的用戶體驗,因爲用戶不必每次都等待回發。

你可以使用jQuery做這個...

http://jsfiddle.net/BAwfH/2/

<fieldset> 
<div class="frm tam"> 
</div> 
<div class="lin"> 
    <asp:FileUpload ID="FileUpload1" runat="server" /> 
</div> 
<div class="lin"> 
    <asp:FileUpload ID="FileUpload2" runat="server" /> 
</div> 
<div class="lin"> 
    <asp:FileUpload ID="FileUpload3" runat="server" /> 
</div> 
<div class="lin"> 
    <asp:FileUpload ID="FileUpload4" runat="server" /> 
</div> 
<div> 
    <asp:Button ID="btnUpload" runat="server" Text="Upload"OnClick="btnUpload_Click" /> 
    <asp:Button ID="btnAdd" class="add-button" runat="server" Text="ADD File" OnClick="btnAdd_Click" /> 
    <asp:Button ID="btnRem" runat="server" Text="Remove File" OnClick="btnRem_Click" /> 
</div> 

<script type="text/javascript"> 
$(document).ready(function(){ 
var lines = $('.lin'); 
lines.hide(); 
lines.filter(':first').show(); 

$('.add-button').click(function(){ 
    lines.filter(':hidden:first').show(); 

    if(lines.filter(':hidden').length == 0) 
     $(this).hide(); 
}); 

});