2013-09-06 3 views
9

업데이트 패널 내에 asp.net FileUpload 컨트롤이 있습니다. 업로드 버튼을 클릭하면 코드를 찾을 수 없으면 코드를 읽습니다. 드롭 다운에서 사용자를 선택하기 위해 ModalPopup을 표시합니다. 그렇지 않으면 파일을 업로드하여 해당 코드의 사용자에게 전자 메일로 보냅니다 (이 코드는 데이터베이스에 저장됩니다) . 코드를 찾을 수 없다면 ModalPopup을 표시하고 선택한 파일을 제거하고 포스트 백 후에 선택한 파일을 유지하려고합니다. 이것은 Persist FileUpload 컨트롤 값

<asp:UpdatePanel ID="UpdatePanel3" runat="server" > 
    <ContentTemplate> 
     <asp:FileUpload ID="FileUpload1" runat="server" /> 
     <asp:RequiredFieldValidator ID="rfvFileupload" ValidationGroup="validate" runat="server" ErrorMessage="* required" ControlToValidate="FileUpload1"></asp:RequiredFieldValidator> 
    </ContentTemplate> 
</asp:UpdatePanel> 

및 버튼에

protected void btnupload_Click(object sender, EventArgs e) 
{ 
    //Reading the file and Checking from Database 
    if(codefound) 
    { 
     //Sending email to the user of the Code 
    } 
    else 
    { 
     ModalPopupExtender1.Show(); 
    } 
} 

을 클릭하여 내 코드입니다 내가 어떻게이 게시물에 업로드 컨트롤의 값을 다시 계속?

답변

14

배경 : : 파일이 후 다시 게시, PostedFile 속성이 파일에 대한 HttpPostedFile 객체로 초기화됩니다 FileUpload 컨트롤을 사용하여 선택됩니다. http 요청은 상태를 유지할 수 없으므로 상태가 손실됩니다.

참고 : FileUpload 컨트롤은 비동기 포스트 백과 작동하지 않으므로 파일을 가져 오려면 다시 게시가 필요합니다.

protected void btnUpload_Click(object sender, EventArgs e) 
    { 
     if (fileUpload1.HasFile) 
     {     
      fileName = fileupload1.FileName; 
      fileUpload1.SaveAs("~/UploadedContent/" + fileName); 
     } 
    } 

가 파일 업로드 제어의 값을 지속, 당신이 저장할 수있는 한 가지 방법은

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
     <asp:FileUpload ID="fileUploadImage" runat="server"></asp:FileUpload> 
     <asp:Button ID="btnUpload" runat="server" Text="Upload Image" 
      OnClick="btnUpload_Click" /> 
     </ContentTemplate> 
     <Triggers> 
      <asp:PostBackTrigger ControlID="btnUpload" /> 
     </Triggers> 
</asp:UpdatePanel> 

<asp:AsyncPostBackTrigger> 그리고 당신의 업로드 버튼 코드 NOT 즉, 당신의 업로드 버튼 <asp:PostBackTrigger > &을 트리거를 설정하는 것입니다 fileupload 개체는 모두 세션에서 그리고 포스트 백 이후에는 세션에서 필요한 값을 검색합니다.

protected void Page_Load(object sender, EventArgs e) 
    { 
     // store the FileUpload object in Session. 
     // "FileUpload1" is the ID of your FileUpload control 
     // This condition occurs for first time you upload a file 
     if (Session["FileUpload1"] == null && FileUpload1.HasFile) 
      { 
      Session["FileUpload1"] = FileUpload1; 
      Label1.Text = FileUpload1.FileName; // get the name 
      } 
     // This condition will occur on next postbacks   
     else if (Session["FileUpload1"] != null && (! FileUpload1.HasFile)) 
      { 
      FileUpload1 = (FileUpload) Session["FileUpload1"]; 
      Label1.Text = FileUpload1.FileName; 
      } 
    // when Session will have File but user want to change the file 
    // i.e. wants to upload a new file using same FileUpload control 
    // so update the session to have the newly uploaded file 
     else if (FileUpload1.HasFile) 
     { 
      Session["FileUpload1"] = FileUpload1; 
      Label1.Text = FileUpload1.FileName; 
     } 
    } 
+1

여기에 두번째 부분은 실제로 questio 응답 사용해야 작동하게합니다. 첫 번째 부분에서는 FileUpload 컨트롤을 UpdatePanel 내에서 작동시키는 방법을 보여줍니다. 이 문제에 대해 언급하지 않으 셨으므로이 부분이 이미 귀하를 위해 일하기를 바랍니다. –

3

이 문제는 문서화되어 있습니다. 업데이트 패널은 특정 컨트롤에서 작동하지 않는 것으로 표시됩니다.

파일 업로드 및 트리보기는 2 대입니다. 는 FileUpload 컨트롤 베일을 유지하는 방법 :

은 당신이 트리거/PostbackTrigger 위 답변

<asp:UpdatePanel ID="UpdatePanel3" runat="server" > 
    <ContentTemplate> 
    <asp:FileUpload ID="FileUpload1" runat="server" /> 
    <asp:RequiredFieldValidator ID="rfvFileupload" ValidationGroup="validate" runat="server" ErrorMessage="* required" ControlToValidate="FileUpload1" /> 
    <asp:Buton ID="btnupload" runat="server" Text="Upload" onclick="btnupload_Click"></asp:Button> 
    </ContentTemplate> 

    <Triggers> 
    <asp:PostBackTrigger ControlID="btnupload"/> 
    </Triggers> 
</asp:UpdatePanel> 
+0

트리거/포스트 백 트리거와 함께 사용하는 방법을 설명해 주시겠습니까? – Jono

+0

수정 된 답변을 참조하십시오. – Pawan