2017-06-02 62 views
0

我想用ASP.NET FileUpload Control和一些文本框和提交按鈕創建C#WebForm。想法:用戶選擇一個文件,輸入一些數據,在提交表單檢查數據,如果有效,它將文件保存在服務器上,否則會顯示錯誤消息。有很多關於UpdatePanel Triggers等的帖子,但不是一個可行的解決方案。帶有precondtions的ASP.NET FileUpload(PostBack後爲空)

這裏我後面的代碼:

protected void Page_Load(object sender, EventArgs e) { 
    // for FileUpload-Control outside UpdatePanel 
    Page.Form.Attributes.Add("enctype", "multipart/form-data"); 
} 

protected void Button1_Click(object sender, EventArgs e) { 
    bool valid = true; 
    string errorMessage = DateTime.Now.ToLongTimeString() + ": "; 

    if (this.TextBox1.Text.Equals("")) { 
     valid = false; 
     errorMessage += "Missing Textbox1<br/>"; 
    } 
    if (this.TextBox2.Text.Equals("")) { 
     valid = false; 
     errorMessage += "Missing Textbox2<br/>"; 
    } 
    if (this.TextBox3.Text.Equals("")) { 
     valid = false; 
     errorMessage += "Missing Textbox3<br/>"; 
    } 
    if (!this.FileUpload3.HasFile) { 
     // is alway false! 
     errorMessage += "Missing FileUpload3<br/>"; 
    } 

    if (valid) { 
     // never fires, because .HasFile is always false 
     this.Label1.Text = "valid!"; 

     // do upload stuff 
     this.FileUpload3.SaveAs("foobar"); 
    } else { 
     this.Label1.Text = errorMessage; 
    } 
} 

這裏是我的樣本ASPX:

<form id="Upload" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 

    <asp:FileUpload ID="FileUpload3" runat="server" /> 

    <asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
     <ContentTemplate> 
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
      <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
      <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox> 
      <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br /> 
      <asp:Label ID="Label1" runat="server" Text=""></asp:Label> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</form> 

有誰看到,爲什麼我的FileUpload總是空的,儘管它在UpdatePanel外面,我有Page_Load()事件中所需的行?如果,你能調整代碼嗎?

謝謝 矽統

+0

FileUpload控件需要一個完整的回發,因此請確保'Button1'觸發之一。 – VDWWD

+0

我在UpdatePanel中添加了一個,但這並不能解決我的問題:如果我選擇一個文件但錯過TextBox3,頁面刷新後FileUpload爲空。我希望FileUpload保留其數據,但顯示錯誤文本。 – StehtimSchilf

+0

這不是FIleUpload的工作原理。如果TextBox3爲空,則需要將文件存儲在服務器上的臨時文件夾中。 – VDWWD

回答

0
<form id="Upload" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 

<asp:FileUpload ID="FileUpload3" runat="server" /> 

<asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
    <ContentTemplate> 
     <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
     <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
     <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox> 
     <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br /> 
     <asp:Label ID="Label1" runat="server" Text=""></asp:Label> 
    </ContentTemplate> 
</asp:UpdatePanel> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="Button1" /> 
    </Triggers> 

+0

1st,您的應該位於UpdatePanel-Tag中,第二:如果我選擇了一個文件但錯過了文本框3它仍然會清除FileUpload-Control。 – StehtimSchilf

+0

嘗試此代碼....在檢查後內部使用控制 – mitul