これに取り組んでいたときに、許容できる解決策を見つけました。それ以来、同じ問題を抱えていて、解決策を見つけたかどうかを尋ねてきた人々から電子メールを受け取りました. だから私はそれをここに提示し、余分なコードを取り除きます:
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;
}
// aspx フロント エンド (chartofthedayadmin.aspx) には、Web メソッドを呼び出すための // JavaScript があり、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;
}
注: scriptmanager に EnablePageMethods="true" があることを確認してください。