上传后显示 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">&nbsp;</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%">&nbsp;</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 一些隐藏字段,或一些类似的字段来跟踪该问题。