1
ViewState에 업로드 된 파일의 이름을 AjaxFileUpload UploadComplete 함수에 저장하고 있지만 포스트 백이 발생할 때 Page_Load 함수에서 해당 이름을 검색 할 수 없습니다. ViewState가 null입니다. 간단한 버튼 클릭 함수에 변수를 저장하기 위해 ViewState를 사용할 때 값은 포스트 백 후에 Page_Load에서 사용할 수 있습니다.ViewState가 AjaxFileUpload에서 작동하지 않습니다.
문제는 AjaxFileUpload UploadComplete 이벤트 때문입니다.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
btnParseDmp.Enabled = false;
btnParseDmp.CssClass = "btnParseDmpDisable";
lblTxtFile.Text = "";
lblWindbgTxtFile.Text = "";
btnTxt.Visible = false;
btnWindbgTxt.Visible = false;
lblOpt.Text = "";
lblStatus.Text = "";
fileListBox.Items.Clear();
m_fileName = "";
latestDir = null;
bParseClicked = false;
dirName = "";
FileName = "";
latestParsedFile = "";
fileListBox.Visible = false;
Response.Clear();
ViewState["m_fileName"] = null;
ViewState["latestDir"] = null;
ViewState["bParseClicked"] = false;
ViewState["dirName"] = null;
ViewState["latestParsedFile"] = null;
ViewState["FileName"] = null;
}
else
{
if (ViewState["FileName"] != null)
{
Console.WriteLine("Not null");
}
else
Console.WriteLine("Null");
m_fileName = (string)ViewState["m_fileName"];
latestDir = (DirectoryInfo)ViewState["latestDir"];
bParseClicked = (bool)ViewState["bParseClicked"];
dirName = (string)ViewState["dirName"];
FileName = (string)ViewState["FileName"];
latestParsedFile = (string)ViewState["latestParsedFile"];
}
}
protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
Random rnd = new Random(DateTime.Now.Millisecond);
int num = rnd.Next(1, 2147483640);
dirName = System.Web.HttpRuntime.AppDomainAppPath + "Parsings\\" + num;
ViewState["dirName"] = dirName;
System.IO.Directory.CreateDirectory(dirName);
FileName = e.FileName;
ViewState["FileName"] = FileName;
FileInfo fz = new FileInfo(FileName);
string ext = fz.Extension;
ext = ext.ToLower();
if (ext.Contains("zip"))
{
AjaxFileUpload1.SaveAs(System.Web.HttpRuntime.AppDomainAppPath + "Temp" + "\\" + e.FileName);
}
else
{
AjaxFileUpload1.SaveAs(dirName + "\\" + e.FileName);
}
bParseClicked = false;
ViewState["bParseClicked"] = bParseClicked;
}
다른 대안을 사용할 수 있습니까? 포스트 백을 통해 파일 이름을 유지해야하기 때문에. –
세션을 사용하여 값을 추적 해보십시오. 아주 좋은 접근 방법은 아니지만 해결 방법을 찾기 위해 그것을 사용해야합니다. – Habeeb
이전에 Session을 사용하고있었습니다. 동일한 페이지가 두 개의 다른 탭에서 동시에 열리면 세션 데이터가 충돌하기 때문에이를 ViewState로 바꿉니다. –