我有一個非常簡單的ASP.NET頁面上傳Excel工作簿,然後處理它。它使用AJAXFILEUPLOAD從ASP.NET AJAX的工具包...這裏的標記:簡單的ASP.NET文件上傳
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
CodeBehind="ImportWorkbook.aspx.cs" Inherits="Timesheet.ImportWorkbook" %>
<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="HeaderContentPlaceHolder">
<h1 class="topContent">
Upload CPAS Timesheet Workbooks
</h1>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="RightContentPlaceHolder" runat="server">
<br />
<br />
<asp:HiddenField ID="tbTSID" runat="server" />
<asp:HiddenField ID="tbWorkbookPath" runat="server" />
<ajaxToolkit:AjaxFileUpload ID="AjaxFileUpload1" runat="server" AllowedFileTypes="xls,xlsx,xlsm"
CssClass="dropdown" MaximumNumberOfFiles="1" OnUploadComplete="AjaxFileUpload1_UploadComplete" />
<br />
<br />
<asp:Panel ID="ProcessChoices" runat="server" >
<br />
<br />
<p>
Select how you want this workbook processed:</p>
<br />
<asp:RadioButtonList ID="rbChoices" runat="server" BorderStyle="Groove" BorderWidth="2px"
BorderColor="Black" BackColor="Teal" Font-Names="Tahoma" Font-Size="10pt" ForeColor="White"
Width="40%">
<asp:ListItem Value="True" Selected="True">  Replace ALL Items in the Timesheet</asp:ListItem>
<asp:ListItem Value="False">  Add Items from this Workbook to the Existing Timesheet Items</asp:ListItem>
</asp:RadioButtonList>
<br />
<br />
<asp:Button ID="btnValidate" runat="server" Text="Validate and Process"
BackColor="#B92217" ForeColor="White" BorderColor="#7C1810"
BorderStyle="Groove" Font-Names="Tahoma" onclick="btnValidate_Click" />
</asp:Panel>
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="BottomSpanContentPlaceHolder" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</asp:Content>
母版頁和CSS的網頁是微不足道的,只有格式化。
這裏的隱藏代碼:
using System;
using System.IO;
using TimesheetUtilites;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AjaxControlToolkit;
namespace Timesheet
{
public partial class ImportWorkbook : System.Web.UI.Page
{
private const string HDriveLocation= "H:\\mtv\\secure\\Construction\\Access\\CPAS WorkArea\\TimesheetUploads\\";
private string strWorkbookPath;
private int currTSID;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.QueryString["ID"] != null)
{
tbTSID.Value = Request.QueryString["ID"]; // Storing the Timesheet ID in a hidden Textbox
}
}
else
{
if (!string.IsNullOrEmpty(tbWorkbookPath.Value))
{
ProcessChoices.Enabled = true;
}
}
int.TryParse(tbTSID.Value, out currTSID);
strWorkbookPath = tbWorkbookPath.Value;
}
protected void AjaxFileUpload1_UploadComplete(object sender, AjaxFileUploadEventArgs e)
{
strWorkbookPath = HDriveLocation + Path.GetFileName(e.FileName);
tbWorkbookPath.Value = strWorkbookPath;
AjaxFileUpload1.SaveAs(strWorkbookPath);
ProcessChoices.Enabled = true;
}
protected void btnValidate_Click(object sender, EventArgs e)
{
bool processOption;
bool.TryParse(rbChoices.SelectedValue, out processOption);
strWorkbookPath = tbWorkbookPath.Value;
TimesheetUtilites.ImportTimesheet imp = new ImportTimesheet(currTSID, strWorkbookPath, processOption);
}
}
}
我的問題很簡單。雖然事件處理程序「AjaxFileUpload1_UploadComplete」工作正常,並上傳在瞬間的文件,當我火「btnValidate_Click」事件時,「tbWorkbookPath.Value」已成爲一個空字符串,而「ProcessChoices.Enabled」歡迎使用屬性不更改。不用說,「上傳完成」事件處理程序是我必須捕獲此文件路徑的唯一機會,所以我不知道我做錯了什麼。
我張貼在ASP.NET和去沒有答案。任何人都可以給我一個想法從哪裏開始?
所以問題是隱藏字段值重置爲後空白之間的空白字符串。你有沒有試過把斷點放在哪裏以確定它的重置位置?嘗試在page_load中放置一個斷點,如果它不是回發。如果觸發你知道這是一個全新的要求,你就會有你的值存儲在自發布此 – 2013-02-18 17:32:21
我已經試過幾件事情會話變量或東西... 1.我刪除了面板。有人在其他地方建議我與小組討論範圍問題......沒有快樂。 2.我將隱藏的字段會話狀態屬性更改爲false ...沒有喜悅...改回。 3.我將隱藏字段更改爲(非隱藏)文本框。在事件處理程序觸發之前和之後,文本框始終顯示爲空白。 – 2013-02-18 17:54:34
那麼,將路徑存儲在會話變量中作爲下面的答案之一應該是非常有用的,但是看看值爲何會被擦除的位置/爲什麼會很有趣。 – 2013-02-18 17:57:55