【问题标题】:ajaxcontroltoolkit setting hidden value after asyncfileupload has completedajaxcontroltoolkit 在异步文件上传完成后设置隐藏值
【发布时间】:2010-06-29 16:39:05
【问题描述】:

我有一个来自 ajaxcontroltoolkit 的 asyncfileupload 控件。在后面的代码中完成的文件上,我处理文件并将文件中的信息写入数据库。我从数据库中获取记录的 id,这需要写入一个 asp 隐藏字段。我试过设置值:

fldImageID.Value = pimg.IdImageGroup.ToString();

我尝试注册一个脚本,就像我在example on a website 中看到的那样:

  ScriptManager.RegisterClientScriptBlock(
         ImageFileUploader, 
         ImageFileUploader.GetType(), 
         "script1",
       "alert('hi'); top.document.getElementById('" 
       + fldImageID.ClientID 
         + "').value='" 
       + pimg.IdImageGroup.ToString() 
       + "'; top.document.getElementById('" 
     + lblError.ClientID 
        + "').innerHTML = 'image uploaded'",
   true);

我刚刚尝试在响应中嵌入 javascript。从我设置的方法写入调用以处理上传的文件。到目前为止,我所做的一切都没有奏效。在我完成所有操作后,隐藏字段仍然不包含所需的值。

【问题讨论】:

    标签: ajaxcontroltoolkit asyncfileupload


    【解决方案1】:

    使用jQuery 非常简单。在您的页面中放置一个 html 隐藏输入控件,不是asp:hidden 输入控件。添加一个类,让我们说"hiddenPhoto" 到您的 html 隐藏控件。

    所以我们的控件html是这样的

    <input type="hidden" class="hiddenPhoto" runat="server" id="hdPhotoName" />
    

    现在使用OnClientUploadComplete js 方法中的类选择器访问它并设置它的值。让它声明 runat="server" 以便在服务器端访问它的值。

    问候

    【讨论】:

      【解决方案2】:

      我在处理这个问题时找到了一个可以接受的解决方案。从那以后,我收到了来自有同样问题的人的电子邮件,并一直在询问我是否找到了解决方案。所以我在这里展示它,去掉所有多余的代码:

      从具有 FileUpload 控件的用户控件,我首先在 FileUploadComplete 处理程序的背面设置会话变量:

      *在 ascx 文件 (upload_chart.ascx) 我有 AsyncFileUpload,重要的是 OnUploadComplete 和 OnClientUploadComplete:*

      <ajaxToolkit:AsyncFileUpload 
               OnUploadedComplete="FileUploadComplete1" 
               OnClientUploadComplete="UploadComplete1" 
               ID="ImageFileUploader" 
               runat="server" />
      

      *在 ascx 文件 (upload_chart.ascx.cs) 后面的代码中我处理 FileUploadComplete:*

      public void FileUploadComplete1(object sender, EventArgs e)
      {
      
          try
          {
              if (ImageFileUploader.FileBytes.Length > 0)
                  {
      
                      // File data is in ImageFileUploaded.FileBytes
                          // Save it however you need to
                      // I saved it to a database, in a DBImage Object class I created
                          // DBImage is specific to my application
                          ODS.Entity.DBImage pimg = 
                              ODS.Data.DataRepository.SaveImageBytes(ImageFileUploaded.FileBytes);
                          // Set the ImageID1 in the session
                      Session["ImageID1"] = pimg.IdImageGroup.ToString();
                  }
                  else
                  {
                      //  error handling for an empty file, however you want to handle it
      
                  }
          }
          catch (Exception Ex)
          {
              //  error handling for an unhandled exception, whatever you want to do here
      
          }
      }
      

      Javascript 和脚本方法用于设置页面上的值,这是我对脚本方法的代码隐藏:

       // on the aspx page code behind (chartofthedayadmin.aspx.cs) I have the webmethod:
      
         [System.Web.Services.WebMethod]
          public static string GetImageID1()
          {
              System.Web.SessionState.HttpSessionState Session = System.Web.HttpContext.Current.Session;
              String retval = Session["ImageID1"].ToString();
              Session["ImageID1"] = null;
              return retval;
          }
      

      这里是 javascript: // 在 aspx 前端 (chartofthedayadmin.aspx) 我有 javascript // 调用 Web 方法和 javascript 失败消息:

      function UploadComplete1() {
               var str = PageMethods.GetImageID1(uploadSuccess1, uploadFailed);
           }
          function uploadFailed() {
      
              alert('error occurred or some meaningfull error stuff');
         }
      

      *// javascript在用户控件(upload_chart.ascx)上设置隐藏字段的值*

       function uploadSuccess1(result) {
      
          document.getElementById('<%= fldImageID.ClientID %>').value = result;
      
      }
      

      注意:确保您的脚本管理器具有 EnablePageMethods="true"。

      【讨论】:

        【解决方案3】:

        更好更简单的解决方案是在后面的代码中:

        string script = String.Format("top.document.getElementById('hdnFilename').value='{0}';", safeFilename);
        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "hdnFilenameFromCodeBehind", script, true);
        

        在我的例子中,safeFilename 是唯一的文件名,在处理重复的文件名后,即 sample.png 第 5 次上传中的 sample_5.png。

        http://forums.asp.net/t/1503989.aspx

        【讨论】:

        • 以类似的方式,你可以调用一个javascript函数。
        猜你喜欢
        • 1970-01-01
        • 2017-11-21
        • 2022-08-16
        • 2019-02-25
        • 1970-01-01
        • 2018-08-04
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        相关资源
        最近更新 更多