0

次のケースがあります。

    protected void btnUpload_Click(object sender, EventArgs e)
    {

        string c = hdntest.Value;
        Image1.ImageUrl = "somePage.aspx";
    }
    protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
    {
        string c = System.IO.Path.GetFileName(e.FileName);
        string path = @"C:/temp/" + c;        
        AjaxFileUpload1.SaveAs(path);

        hdntest.Value = path;
    }

上記のコードで、アップロード完了イベントにブレークポイントを挿入すると、隠しフィールドに画像パスの正しい値が表示されました。しかし、ボタンクリックで同じ値を見ると、パスが失われます。この問題について助けが必要です。

4

2 に答える 2

0

あなたはこれを試すことができます

この JavaScript を追加して、非表示フィールドhdntestに URL を設定します

<script type="text/javascript">
         function onClientUploadComplete(sender, e) {
             document.getElementById('<%=hdntest.ClientID %>').value = e.get_postedUrl();
         }
</script>

これがAjaxFileUploadのあり方です

<asp:UpdatePanel ID="up" runat="server"> 
        <ContentTemplate> 
            <ajaxToolkit:AjaxFileUpload ID="AjaxFileUpload1" runat="server" OnUploadComplete="AjaxFileUpload1_UploadComplete" ViewStateMode="Inherit" 
                OnClientUploadComplete="onClientUploadComplete"/>
            <asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" /> 
            <asp:HiddenField ID="hdntest" runat="server" />
            <br /><asp:Image ID="Image1" runat="server" Width="200px" Height="200px"/>
        </ContentTemplate> 
        <Triggers> <asp:PostBackTrigger ControlID="btnUpload" /> </Triggers> 
    </asp:UpdatePanel>

すべてのコントロールを同じ UpdatePanel に配置し、次のプロパティを AjaxFileUpload コントロールに追加する必要があります: OnClientUploadComplete="onClientUploadComplete"

あなたのコードでは非表示にする必要があります

protected void btnUpload_Click(object sender, EventArgs e)
{
        string c = hdntest.Value;
        Image1.ImageUrl = c;
}

protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
    if (e.ContentType.Contains("jpg") || e.ContentType.Contains("gif")
        || e.ContentType.Contains("png") || e.ContentType.Contains("jpeg"))
    {
        Session["fileContentType_" + e.FileId] = e.ContentType;
        Session["fileContents_" + e.FileId] = e.GetContents();
    }

    // Set PostedUrl to preview the uploaded file.         
    e.PostedUrl = string.Format("?preview=1&fileId={0}", e.FileId);
}

最後に、page_load イベント ハンドラーで psted url を処理する必要があります。

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.QueryString["preview"] == "1" && !string.IsNullOrEmpty(Request.QueryString["fileId"]))
    {
          var fileId = Request.QueryString["fileId"];
          var fileContents = (byte[])Session["fileContents_" + fileId];
          var fileContentType = (string)Session["fileContentType_" + fileId];

          // To clear the current uploaded file, prepare to upload other files
          if (fileContents != null)
          {
                Response.Clear();
                Response.ContentType = fileContentType;
                Response.BinaryWrite(fileContents);
                Response.End();
          }
      }
  }
于 2013-11-12T13:55:02.123 に答える