我想用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()事件中所需的行?如果,你能調整代碼嗎?
謝謝 矽統
FileUpload控件需要一個完整的回發,因此請確保'Button1'觸發之一。 – VDWWD
我在UpdatePanel中添加了一個,但這並不能解決我的問題:如果我選擇一個文件但錯過TextBox3,頁面刷新後FileUpload爲空。我希望FileUpload保留其數據,但顯示錯誤文本。 –
StehtimSchilf
這不是FIleUpload的工作原理。如果TextBox3爲空,則需要將文件存儲在服務器上的臨時文件夾中。 – VDWWD