2

내 프로젝트에서 파일을 업로드해야하므로 asp.net 아약스 컨트롤 AsyncFileUPloader 컨트롤에서 제공하는 업 로더를 사용하기로 결정했습니다. 네 개의 블록이 있습니다. 모든 블록에는 두 개의 업 로더 이 포함되어 있으므로 asp.net 웹 사용자 컨트롤의 기능을 활용하기로 결정했습니다. 내가 지금 내가 Ajax Control Toolkit AsyncFileUploader 컨트롤 및 viewstate/session 문제

enter image description here

이 내 문제는 여기서 시작

아래의 스냅을 참조하시기 바랍니다 내 aspx 페이지에이 컨트롤의 네 개의 인스턴스를 넣어야 할 DesignUploader.ascx 라는 내 사용자 컨트롤에서 필요한 양식 필드를 감싸 나는 fileurl을 데이터베이스에 삽입해야하며 각 블록은 서버에 파일을 업로드 한 후 고유 한 ID 및 ID 값을 생성합니다. 나는 viewstate가 나를 위해 작동하지 않는다는 것을 알아 냈다. asyncfileuploader이면 viewstate가 서버 뒤에서 비밀 포스트 백을 수행하기 때문에이 뷰 상태가 지워진다. 이제는 나를 위해 남은 옵션은 세션 인이지만 사용자가 두 블록 씩 차례로 파일을 업로드하면 두 번째/세 번째 연속 블록의 파일 경로가 내 세션을 덮어 씁니다. 사용자가 디자인을 업로드하는 데 사용할 수있는 블록의 수를 1 개만 사용할 수도 있고 4 개를 모두 사용할 수도 있습니다.

최종 내가 데이터베이스에 데이터를 삽입 할 필요가있는 클릭에 페이지 하단에 버튼을 제출이있을 것입니다. 내가 세션 저장을 데이터베이스로 내 문제의 모든 레코드에 대한 최근 업로드 파일 경로의 값을 데이터를 저장하려고 그렇게

내가 수 있다면 내가 모르는

여기있다 올바른 방식으로 내 문제를 설명하거나 명확하지 않은 경우 실례합니다. 필요한 경우 의견을 게시하십시오.

참고 : 클라이언트가 나는 당신이 파일 경로를 저장하는 생각이 유일한 :(어떤 빠른 작업 주위에 감상 할 수있다

많은

감사에 대한 Devjosh

답변

2

을 주장 때문에 UI를 변경할 수 없습니다 세션을 잘못된 방식으로하고 코드없이 오류가 어디인지 인식하는 것은 불가능합니다. 내 의견으로는 세션에서 파일 경로를 유지하지 말고 대신 클라이언트 측에서 사용하십시오. 두 개의 숨겨진 필드를 DesignUploader.ascx 컨트롤 및 해당 값 설정 s에서 UploadedComplete 이벤트 처리기. 응답에 대한

public partial class DesignUploader : System.Web.UI.UserControl 
{ 
    private static readonly string AppDataPath = HttpContext.Current.Server.MapPath("~/App_Data/"); 

    public string FirstFilePath 
    { 
     get 
     { 
      return Server.UrlDecode(FirstFilePathHiddenField.Value); 
     } 
    } 

    public string SecondFilePath 
    { 
     get 
     { 
      return Server.UrlDecode(SecondFilePathHiddenField.Value); 
     } 
    } 

    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 

     FirstFileUpload.UploadedComplete += FirstFileUpload_UploadedComplete; 
     SecondileUpload.UploadedComplete += SecondileUpload_UploadedComplete; 
    } 

    void FirstFileUpload_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) 
    { 
     var fullPath = Path.Combine(AppDataPath, Path.GetFileName(e.FileName)); 
     FirstFileUpload.SaveAs(fullPath); 
     SaveFilePathToHiddenField(FirstFilePathHiddenField.ClientID, fullPath); 
    } 

    void SecondileUpload_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) 
    { 
     var fullPath = Path.Combine(AppDataPath, Path.GetFileName(e.FileName)); 
     SecondileUpload.SaveAs(fullPath); 
     SaveFilePathToHiddenField(SecondFilePathHiddenField.ClientID, fullPath); 
    } 

    private void SaveFilePathToHiddenField(string fieldId, string pathValue) 
    { 
     var script = string.Format("top.$get('{0}').value = '{1}';", fieldId, Server.UrlEncode(pathValue)); 
     ScriptManager.RegisterStartupScript(this, this.GetType(), "setPath", script, true); 
    } 
} 
+0

감사합니다. 예 당신은 내가 파일 경로 onfileuploaded 이벤트를 저장하는 방법을 시도했지만 난 내 서버 측에서 숨겨진 필드를 설정할 때에 HiddenField가/세트를 업데이트하고 난 대체 으로 지금을 저장하는 세션을 사용하는 이유를 먹으 렴하지 않는 이벤트를 onFileUploaded 말했듯이 내가 내 직장에서 나가서 코드를 게시 할 수 없습니다. 당신이 커스텀 이벤트를 일으켰을 때 나는 그런 식으로 시도하지 않았다. 나는 그것을 시도하고 알려준다. – Devjosh

+0

내 코드에 커스텀 이벤트가 없다. 'UploadedComplete' 이벤트 핸들러에서 비동기 적으로 실행될 때 숨겨진 필드 값을 설정할 수 없습니다. 하지만 클라이언트에 숨겨진 필드 값을 업데이트하기 위해 자바 스크립트를 등록 할 수 있습니다. 이것은 제안 된 코드에서 사용되는 경우입니다. AsyncFileUpload가 프레임에서 실행될 때 부모 프레임에서'$ get' 함수를 호출해야한다는 것에 주목하십시오. –

+0

ok @yuriy 나는 이것을 시험해보고 내일 다시 감사 할 것을 알려준다. – Devjosh

관련 문제