2011-11-04 3 views
3

나는 두려움의 허리케인을주는 꽤 흥미로운 딜레마가있다. 비슷한 질문을했지만 사용자가 코드를 게시하지 않았으므로 해결되지 않았습니다. 이것은 asp.net, SQL 서버 및 C# 응용 프로그램입니다.내 텍스트 상자가 포스트 백에서 텍스트를 지우는 것을 방지하는 방법.

내 응용 프로그램에서는 긴 프로세스가 실행되는 동안 사용자를 즐겁게하기 위해 JavaScript를 사용하여 TextBox에 더미 데이터를 표시합니다. (참고 :이 프로젝트는 전문 앱이 아닙니다.)

문제는 앱 실행이 완료되면 앱이 페이지를 새로 고침하고 TextBox을 삭제합니다. 이 문제가 발생하지 않도록 방지하고 프로그램이 완료된 후에도 텍스트를 계속 표시하려고합니다.

제 질문은 다음 코드에서 페이지를 새로 고치는 위치는 어디입니까? 텍스트를 지우지 않기 위해 어떻게 다시 코딩 할 수 있습니까?

JavaScript 또는 .aspx 페이지에 문제가 없음을 알고 있습니다. 텍스트를 지우는 속성을 설정하거나 프로그래밍하지 않았습니다. 누구든지이 문제에 관해 밝혀 낼 수 있다면 크게 감사하겠습니다. 나에게 더 많은 코드가 필요한 경우 알려 주시기 바랍니다. 이 페이지가 해결 될 때까지이 페이지에서 매우 활발하게 활동할 것입니다. 다시 한 번 감사드립니다!

public partial class SendOrders : System.Web.UI.Page 
{ 
    protected enum EDIType 
    { 
     Notes, 
     Details 
    } 

    protected static string NextBatchNum = "1"; 
    protected static string FileNamePrefix = ""; 
    protected static string OverBatchLimitStr = "Batch file limit has been reached. No more batches can be processed today."; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     Initialize(); 
    } 

    protected void Page_PreRender(object sender, EventArgs e) 
    { } 

    protected void btnExit_Click(object sender, EventArgs e) 
    { 
     System.Diagnostics.Process.GetCurrentProcess().Kill(); 
    } 

    protected void Button_Click(object sender, EventArgs e) 
    { 
     PutFTPButton.Enabled = false; 
     Thread.Sleep(3000); 
     Button btn = (Button)sender; 
     KaplanFTP.BatchFiles bf = new KaplanFTP.BatchFiles(); 
     KaplanFTP.Transmit transmit = new KaplanFTP.Transmit(); 

     if (btn.ID == PutFTPButton.ID) 
     { 
      DirectoryInfo dir = new DirectoryInfo(@"C:\Kaplan"); 
      FileInfo[] BatchFiles = bf.GetBatchFiles(dir); 
      bool result = transmit.UploadBatchFilesToFTP(BatchFiles); 

      if (!result) 
      { 
       ErrorLabel.Text += KaplanFTP.errorMsg; 
       return; 
      } 

      bf.InsertBatchDataIntoDatabase("CTL"); 
      bf.InsertBatchDataIntoDatabase("HDR"); 
      bf.InsertBatchDataIntoDatabase("DET"); 
      bf.InsertBatchDataIntoDatabase("NTS"); 

      List<FileInfo> allfiles = BatchFiles.ToList<FileInfo>(); 
      allfiles.AddRange(dir.GetFiles("*.txt")); 
      bf.MoveFiles(allfiles); 

      foreach (string order in bf.OrdersSent) 
      { 
       OrdersSentDiv.Controls.Add(new LiteralControl(order + "<br />")); 
      } 

      btnExit.Visible = true; 
      OrdersSentDiv.Visible = true; 
      OrdersInfoDiv.Visible = false; 
      SuccessLabel.Visible = true; 
      NoBatchesToProcessLbl.Visible = true; 
      BatchesToProcessLbl.Visible = false; 
      PutFTPButton.Enabled = false; 
      BatchesCreatedLbl.Text = int.Parse(NextBatchNum).ToString(); 
      Thread.Sleep(20000); 

      if (KaplanFTP.errorMsg.Length != 0) 
      { 
       ErrorLabel.Visible = false; 
       SuccessLabel.Visible = true; 
       ErrorLabel.Text = KaplanFTP.errorMsg; 
      } 
     } 
    } 

    private void Initialize() 
    { 
      KaplanFTP.BatchFiles bf = new KaplanFTP.BatchFiles(); 

      if (!IsPostBack) 
      { 
       FileNamePrefix = bf.FileNamePrefix; 
       NextBatchNum = bf.NextBatchNum; 
       BatchesCreatedLbl.Text = (int.Parse(NextBatchNum) - 1).ToString(); 

       if (bf.CheckLocalForNewBatch() == true) 
       { 
        NoBatchesToProcessLbl.Visible = false; 
        BatchesToProcessLbl.Visible = true; 
        if (int.Parse(NextBatchNum) >= 50) 
        { 
         ErrorLabel.Text += ErrorLabel.Text + OverBatchLimitStr; 
         ErrorLabel.Visible = true; 
         PutFTPButton.Enabled = false; 
        } 
        else 
        { 
         bf.ReadyFilesForTransmission(); 
         ErrorLabel.Visible = false; 
         PutFTPButton.Enabled = true; 
         List<string[]> detStream = bf.GetBatchStream("DET"); 
         List<string[]> hdrStream = bf.GetBatchStream("HDR"); 
         OrdersInfoDiv.Visible = true; 

         DataTable dt = new DataTable(); 
         dt.Columns.Add("ORDER NUMBER"); 
         dt.Columns.Add("LINE NUMBER"); 
         dt.Columns.Add("ITEM NUMBER/ISBN"); 
         dt.Columns.Add("DESCRIPTION"); 
         dt.Columns.Add("QUANTITY"); 
         dt.Columns.Add("SHIPPING"); 

         Dictionary<string, string> orderShip = new Dictionary<string, string>(); 

         foreach (string[] hdrItems in hdrStream) 
         { 
          orderShip.Add(hdrItems[0], hdrItems[2]); 
         } 
         foreach (string[] detItems in detStream) 
         { 
          List<string> detLineList = new List<string>(detItems); 
          detLineList.Add(orderShip[detItems[0]]); 
          detLineList.RemoveAt(13); 
          detLineList.RemoveAt(12); 
          detLineList.RemoveAt(11); 
          detLineList.RemoveAt(10); 
          detLineList.RemoveAt(9); 
          detLineList.RemoveAt(8); 
          detLineList.RemoveAt(7); 
          detLineList.RemoveAt(4); 
          detLineList.RemoveAt(2); 
          detLineList[1] = detLineList[1].TrimStart('0'); 
          detLineList[4] = detLineList[4].TrimStart('0'); 
          dt.Rows.Add(detLineList.ToArray()); 
         } 

         BatchDetails.DataSource = dt; 
         BatchDetails.DataBind(); 
        } 
       } 
       else 
       { 
        NoBatchesToProcessLbl.Visible = true; 
        BatchesToProcessLbl.Visible = false; 
        PutFTPButton.Enabled = false; 
       } 
      } 
     } 
} 
+1

javascript/html은 어디에 있습니까? – Nate

+0

코드를 뒤에서 사용했습니다. 하지만 모든 자바 스크립트는 텍스트 상자에 텍스트를 삽입하고 있습니다. 그 코드도 게시 해 주시겠습니까? – javasocute

+1

해당 텍스트 상자는이 코드에서 참조됩니까? UpdatePanels를 사용하고 있습니까? – patmortech

답변

3

예. 당신은 IsPostBack을 사실입니다 경우를 Page_Load 내부의 제어를하여 계산의 상태를 확인하고 채울해야합니다 : 당신은 아마도뿐만 아니라 다른 절에 초기화()를 이동할 수 있습니다

protected void Page_Load(object sender, EventArgs e) { 
    if (IsPostBack) { 
     // re-populate javascript-fill UI 
    } else { 
    } 
    Initialize(); 
} 

.

+0

음, 좋은 생각입니다. 어떻게 이것을 자바 스크립트로 작성 하시겠습니까? – javasocute

+0

당신은 이것을 쓰지 않습니다. 이것은 자바 스크립트입니다. 이것은 포스트 백을 통해 데이터를 유지하기위한 C# 코드에 있어야합니다. – drdwilcox

+0

아하. 너는 대단한 천재 야. 고마워! – javasocute

0

버튼 클릭 서버 측 (사용자가 버튼을 클릭하면 문제가 발생한다고 가정합니다)을 처리하고 있으므로이를 처리 할 포스트 백이 있어야합니다.

updatepanel 컨트롤에 버튼과 라벨을 넣어보세요. AJAX를 사용하여 내용을 새로 고칩니다.

updatepanel에 대한 자세한 내용은 this page을 참조하십시오.

관련 문제