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

按照以下代码中的指定进行更改

在 aspx 页面中:

  <ajaxtoolkit:ajaxfileupload id="AjaxFileUpload1" runat="server" 
        onuploadcomplete="AjaxFileUpload1_UploadComplete"
        onclientuploadcomplete="onClientUploadComplete"
        viewstatemode="Inherit" />
    <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="Button1_Click" />
    <asp:UpdatePanel ID="up" runat="server">
        <ContentTemplate>
            <asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" />
        </ContentTemplate>
        <Triggers>
            <asp:PostBackTrigger ControlID="btnUpload" />
        </Triggers>
    </asp:UpdatePanel>

在 javascript 中添加以下代码:

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

            alert(path +'  ' + document.getElementById("hdntest").value);
        }
</script>

在 .cs 文件中进行如下更改:

       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;
            e.PostedUrl = path;
        }
于 2013-11-12T11:36:20.087 回答
0

你可以试试这个

添加此 javascript 以将 url 设置为隐藏字段hdntest

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