Я нашел приемлемое решение, когда работал над этим. И с тех пор я получил электронные письма от людей, у которых была такая же проблема, и они спрашивали, нашел ли я решение. Итак, я представляю его здесь, удаляя весь посторонний код:
Из пользовательского элемента управления, который имеет элемент управления 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 // для вызова веб-метода и сообщение об ошибке 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".
person
stephenbayer
schedule
27.01.2011