2017-10-26 1 views
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; 
} 

답변

1

AjaxFileUpload 작동 방식에 따라 viewstate를 얻을 수 없습니다.

+0

다른 대안을 사용할 수 있습니까? 포스트 백을 통해 파일 이름을 유지해야하기 때문에. –

+0

세션을 사용하여 값을 추적 해보십시오. 아주 좋은 접근 방법은 아니지만 해결 방법을 찾기 위해 그것을 사용해야합니다. – Habeeb

+0

이전에 Session을 사용하고있었습니다. 동일한 페이지가 두 개의 다른 탭에서 동시에 열리면 세션 데이터가 충돌하기 때문에이를 ViewState로 바꿉니다. –

관련 문제