我有一个asyncfileupload控件,我正在使用ajaxcontroltoolkit。在后面的代码中完成的文件中,我处理文件并将文件中的信息写入数据库。我从数据库中获取记录的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嵌入到我设置的处理上传文件的方法的response.Write调用中。到目前为止,我所做的一切都没有奏效。在我完成所有操作后,隐藏字段仍然不包含所需的值。
答案 0 :(得分:3)
使用jQuery
非常简单。在页面中放置一个html隐藏的输入控件,不 asp:hidden
输入控件。添加一个类,让我们为你的html隐藏控件说"hiddenPhoto"
。
所以我们说我们的控件html就像这样
<input type="hidden" class="hiddenPhoto" runat="server" id="hdPhotoName" />
现在使用OnClientUploadComplete
js方法中的类选择器访问它并设置其值。让它声明runat="server"
以便在服务器端访问它的值。
此致
答案 1 :(得分: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');
}
* //用户控件上的javascript(upload_chart.ascx)设置隐藏字段的值*
function uploadSuccess1(result) {
document.getElementById('<%= fldImageID.ClientID %>').value = result;
}
注意:请确保您的scriptmanager具有EnablePageMethods =“true”。
答案 2 :(得分:0)
更好更简单的解决方案是在代码背后:
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。