1

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

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

我尝试注册一个脚本,就像我在网站上的示例中看到的那样:

  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。从我设置的方法中写入调用以处理上传的文件。到目前为止,我所做的一切都没有奏效。在我完成所有操作后,隐藏字段仍然不包含所需的值。

4

3 回答 3

3

这很容易使用jQuery. 在您的页面中放置一个 html 隐藏输入控件,而不是asp:hidden输入控件。添加一个类,让我们"hiddenPhoto"对您的 html 隐藏控件说。

所以可以说我们的控制html是这样的

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

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

问候

于 2011-08-13T01:26:59.903 回答
0

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

从具有 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');
   }

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

 function uploadSuccess1(result) {

    document.getElementById('<%= fldImageID.ClientID %>').value = result;

}

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

于 2011-01-27T21:50:16.633 回答
0

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

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

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

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

于 2014-01-22T10:42:45.157 回答