2013-09-06 12 views
9

私は、更新パネル内にasp.net FileUploadコントロールを持っています。アップロードボタンをクリックすると、コードが見つからない場合にコードを読み込みます。ドロップダウンからユーザーを選択するためにModalPopupを表示しています。そうでなければ、コードをユーザーにアップロードしてメールで送信します(このコードはデータベースに保存されます) 。 コードが見つからず、ModalPopupが表示され、選択したファイルを削除した場合は、選択したファイルをポストバック後も保持します。 これは私がポスト背面にアップロードコントロールの値を持続することができますどのようにPersist FileUploadコントロール値

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(); 
    } 
} 

をクリックして自分のコード

<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> 

ボタンをですか?

答えて

14

背景:: ファイルはFileUploadコントロールを使用して選択された場合、その後、ポストバックに、PostedFileプロパティは、ファイルのHttpPostedFileオブジェクトで初期化されます。 httpリクエストは状態を維持できないので、状態は失われます。

注: FileUploadコントロールは非同期ポストバックでは機能しません。ファイルを取得するにはポストバックが必要です。

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

をするFileUploadコントロールの値を永続化するために、あなたが保存することができます:一つの方法は、

<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>そして、あなたのアップロードボタンのコードではありませんつまり、あなたのアップロードボタンの<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

関連する問題