我有一个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();
}
}
}当我插入一个文件并希望它上传时,它看起来是这样的:在此之前,但是当我按下“保存”按钮时,该文件将被删除并刷新页面。尽管如此,该文件仍在数据库中,但我无法在页面上看到它。在保存之后,它看起来是这样的:之后 为什么会发生这种情况?如何修复它总是在更新之后向我展示的问题?
发布于 2022-02-21 18:16:22
文件上传控制只能保存一个回发。当您单击任何导致回发的按钮时,文件上传就会真正开始。一旦完成,您的代码就必须抓取+保存有关该文件的信息。现在完成后面的代码后,文件上传控件将被重新设置,文件将不再被拥有、查看或由上传控件使用。
我也不太确定有一个“编辑”按钮的逻辑。为什么不只有一个保存或提交按钮。我的意思是,一些编辑按钮不会总是被用户点击-他们只会开始键入文本框,然后点击保存。但是如前所述,任何按钮单击(回发)都会导致向上加载启动,然后,正如前面提到的,在回发中您有一次机会获得该信息。
使用编辑按钮的介绍,用户可以使用文件上传来选择一个文件,然后说点击编辑-这将触发回发。
因此,您需要一个保存按钮来消除UI的混乱,但更重要的是,在保存时,您必须保存该文件,更新数据库,实际上,您可能希望隐藏向上加载控件,或者在UI中从向上加载程序页面转移到其他信息显示。因此,您希望用户输入信息,选择一个文件,然后按一个按钮启动向上加载,然后保存输入的信息。如果允许加载附加文件,则希望保存/设置一些隐藏字段,或其他这样的字段来跟踪该问题。
https://stackoverflow.com/questions/71207012
复制相似问题