上传后显示 Asp.net 中的上传文件
After upload show uploaded file in Asp.net
我有这个 Asp.net 代码:
<asp:Panel ID="pnlCustomer" runat="server">
<p class=".SmallCaption">
<b>Edit report</b></p>
<table class="DataTable" id="Bug" cellspacing="0" cellpadding="2" width="100%" border="0">
<tr>
<td class="CellName" width="25%">
<asp:Label CssClass="CasualForm" id="lblUploadFile" runat="server">Save new file</asp:Label>
</td>
<td class="CellValue" width="25%">
<asp:FileUpload CssClass="formdata100" ID="fuUploadedFile" runat="server" />
</td>
<td class="CellName" width="50%" colspan="2"> </td>
</tr>
<tr>
<td class="CellName" width="25%">
<asp:Button ID="btnDelete" runat="server" Text="Delete" OnClick="BtnDeleteReport" style="float:left" OnClientClick="if(confirm('Do you really want to delete this report?')) {this.disabled = true;} else {return false;}" UseSubmitBehavior="false" />
</td>
<td class="CellName" width="25%"> </td>
<td class="CellName" width="47%">
<asp:Button ID="btnDownloadFile" runat="server" Text="Get Report" onclick="btnDownloadFile_Click" />
</td>
<td class="CellName" width="3%">
<asp:Button ID="btnSave" runat="server" Text="Edit" OnClientClick="if(checkFileUploadSize()) {return true;}" onclick="btnEdit_Click" CommandArgument="Edit" />
</td>
</tr>
</table>
</asp:Panel>
这是 C# 的反向代码:
protected void btnEdit_Click(object sender, EventArgs e) {
Button btnThis = (Button) sender;
if (btnThis.Text == "Edit") {
Edit();
btnThis.Text = "Save";
} else if (btnThis.Text == "Save") {
Save();
//btnThis.Text = "Edit";
}
}
private void Save() {
ReadDataFromGUI();
// insert/update report in DB.
int _id = reportsHandler.Update(report);
Response.Redirect("~/ReportsEditor.aspx?id=" + _id);
}
private void ReadDataFromGUI() {
if (report == null)
report = new Support_Report();
report.id = report_id;
report.id_entity = int.Parse(ddlEntities.SelectedValue);
report.inactive = cbInactive.Checked;
report.name = txtName.Text.Trim();
report.description = txtDescription.Text.Trim();
report.report_condition = txtReportCondition.Text.Trim();
int _so;
isSortOrderInteger = int.TryParse(txtSortOrder.Text.Trim(), out _so);
if (isSortOrderInteger) {
report.sort_order = _so;
}
string StrFileName = Path.GetFileName(fuUploadedFile.FileName);
int IntFileSize = fuUploadedFile.PostedFile.ContentLength;
if (StrFileName != null && StrFileName != "") {
string path = Utility.Utility.GenerateTempFileName(StrFileName);
FileInfo fi = new FileInfo(path);
fuUploadedFile.PostedFile.SaveAs(path);
try {
var extension = Path.GetExtension(StrFileName).Replace(".", "");
report.report_type = extension;
if (extension == "mrt") {
var xml_doc = new XmlDocument();
xml_doc.Load(path);
report.report_file = xml_doc.OuterXml;
} else {
report.report_file = Convert.ToBase64String(File.ReadAllBytes(path));
}
} finally {
fi.Delete();
}
}
}
当我插入文件并希望它上传时,它看起来像这样:Before
但是当我按下“保存”按钮时,该文件在页面上被删除并刷新了页面。尽管如此,该文件仍在数据库中,但我无法在该页面上看到它。然后保存后看起来像这样: After 为什么会这样? 如何解决即使在更新后它总是显示给我?
文件上传控件只能存活一个post回来。当您单击任何导致 post-back 的按钮时,文件上传就会真正开始。完成后,您的代码必须获取并保存有关文件的信息。现在完成代码隐藏后,file-upload 控件为 re-set,上传控件将无法再拥有、查看或使用该文件。
而且我不太确定具有“编辑”按钮的逻辑。为什么不只有一个保存或提交按钮。我的意思是,一些编辑按钮不会总是被用户点击——他们只会开始在文本框中输入内容,然后点击保存。但如前所述,单击任何按钮 (post-back) 都会导致 up-load 启动,然后如前所述,在那个 post 后面你有一次机会获得该信息。
引入编辑按钮后,用户可能会使用文件上传到 select 文件,然后说点击编辑 - 这将触发 post-back。
因此,您需要一个 de-confuse 和 UI 的保存按钮,但更重要的是,在保存时,您必须保存该文件,更新您的数据库,事实上可能想要隐藏 up-load 控件,或者在您的 UI 中从 up-loader 页面继续到其他信息显示。所以,你想让用户输入信息,select一个文件,然后点击ONE按钮启动up-load,然后保存输入的信息。如果您允许 up-load 编辑其他文件,则需要 save/setup 一些隐藏字段,或一些类似的字段来跟踪该问题。
我有这个 Asp.net 代码:
<asp:Panel ID="pnlCustomer" runat="server">
<p class=".SmallCaption">
<b>Edit report</b></p>
<table class="DataTable" id="Bug" cellspacing="0" cellpadding="2" width="100%" border="0">
<tr>
<td class="CellName" width="25%">
<asp:Label CssClass="CasualForm" id="lblUploadFile" runat="server">Save new file</asp:Label>
</td>
<td class="CellValue" width="25%">
<asp:FileUpload CssClass="formdata100" ID="fuUploadedFile" runat="server" />
</td>
<td class="CellName" width="50%" colspan="2"> </td>
</tr>
<tr>
<td class="CellName" width="25%">
<asp:Button ID="btnDelete" runat="server" Text="Delete" OnClick="BtnDeleteReport" style="float:left" OnClientClick="if(confirm('Do you really want to delete this report?')) {this.disabled = true;} else {return false;}" UseSubmitBehavior="false" />
</td>
<td class="CellName" width="25%"> </td>
<td class="CellName" width="47%">
<asp:Button ID="btnDownloadFile" runat="server" Text="Get Report" onclick="btnDownloadFile_Click" />
</td>
<td class="CellName" width="3%">
<asp:Button ID="btnSave" runat="server" Text="Edit" OnClientClick="if(checkFileUploadSize()) {return true;}" onclick="btnEdit_Click" CommandArgument="Edit" />
</td>
</tr>
</table>
</asp:Panel>
这是 C# 的反向代码:
protected void btnEdit_Click(object sender, EventArgs e) {
Button btnThis = (Button) sender;
if (btnThis.Text == "Edit") {
Edit();
btnThis.Text = "Save";
} else if (btnThis.Text == "Save") {
Save();
//btnThis.Text = "Edit";
}
}
private void Save() {
ReadDataFromGUI();
// insert/update report in DB.
int _id = reportsHandler.Update(report);
Response.Redirect("~/ReportsEditor.aspx?id=" + _id);
}
private void ReadDataFromGUI() {
if (report == null)
report = new Support_Report();
report.id = report_id;
report.id_entity = int.Parse(ddlEntities.SelectedValue);
report.inactive = cbInactive.Checked;
report.name = txtName.Text.Trim();
report.description = txtDescription.Text.Trim();
report.report_condition = txtReportCondition.Text.Trim();
int _so;
isSortOrderInteger = int.TryParse(txtSortOrder.Text.Trim(), out _so);
if (isSortOrderInteger) {
report.sort_order = _so;
}
string StrFileName = Path.GetFileName(fuUploadedFile.FileName);
int IntFileSize = fuUploadedFile.PostedFile.ContentLength;
if (StrFileName != null && StrFileName != "") {
string path = Utility.Utility.GenerateTempFileName(StrFileName);
FileInfo fi = new FileInfo(path);
fuUploadedFile.PostedFile.SaveAs(path);
try {
var extension = Path.GetExtension(StrFileName).Replace(".", "");
report.report_type = extension;
if (extension == "mrt") {
var xml_doc = new XmlDocument();
xml_doc.Load(path);
report.report_file = xml_doc.OuterXml;
} else {
report.report_file = Convert.ToBase64String(File.ReadAllBytes(path));
}
} finally {
fi.Delete();
}
}
}
当我插入文件并希望它上传时,它看起来像这样:Before 但是当我按下“保存”按钮时,该文件在页面上被删除并刷新了页面。尽管如此,该文件仍在数据库中,但我无法在该页面上看到它。然后保存后看起来像这样: After 为什么会这样? 如何解决即使在更新后它总是显示给我?
文件上传控件只能存活一个post回来。当您单击任何导致 post-back 的按钮时,文件上传就会真正开始。完成后,您的代码必须获取并保存有关文件的信息。现在完成代码隐藏后,file-upload 控件为 re-set,上传控件将无法再拥有、查看或使用该文件。
而且我不太确定具有“编辑”按钮的逻辑。为什么不只有一个保存或提交按钮。我的意思是,一些编辑按钮不会总是被用户点击——他们只会开始在文本框中输入内容,然后点击保存。但如前所述,单击任何按钮 (post-back) 都会导致 up-load 启动,然后如前所述,在那个 post 后面你有一次机会获得该信息。
引入编辑按钮后,用户可能会使用文件上传到 select 文件,然后说点击编辑 - 这将触发 post-back。
因此,您需要一个 de-confuse 和 UI 的保存按钮,但更重要的是,在保存时,您必须保存该文件,更新您的数据库,事实上可能想要隐藏 up-load 控件,或者在您的 UI 中从 up-loader 页面继续到其他信息显示。所以,你想让用户输入信息,select一个文件,然后点击ONE按钮启动up-load,然后保存输入的信息。如果您允许 up-load 编辑其他文件,则需要 save/setup 一些隐藏字段,或一些类似的字段来跟踪该问题。