Ho avuto questo problema esattamente lo stesso. Penso che quello che vorrete fare è creare un controllo utente per ogni istanza del caricamento che volete avere sulla vostra pagina. Esempio del mio lavoro di controllo uploadify:
//ascx
<style type="text/css">
.hidden { display:none; }
</style>
<script src="/Uploadify/jquery.uploadify.v2.1.4.js" type="text/javascript"></script>
<script src="/Uploadify/jquery.uploadify.v2.1.4.min.js" type="text/javascript"></script>
<script src="/Uploadify/swfobject.js" type="text/javascript"></script>
<link href="/Uploadify/uploadify.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
$(document).ready(function() {
var obj = document.getElementById('<%= this.fileInput.ClientID %>');
$(obj).uploadify({
'uploader': '/uploadify/uploadify.swf',
'script': '/_handlers/Upload.ashx',
'cancelImg': '/uploadify/cancel.png',
'auto': true,
'multi': true,
'fileDesc': 'Image Files',
'fileExt': document.getElementById('<%= this.uTypes.ClientID %>').value,
'buttonText': 'Choose Images',
'folder': '/' + document.getElementById('<%= this.fileDest.ClientID %>').value,
'onAllComplete': function (event, queueID, fileObj, response, data) {
var btn = document.getElementById('<%= this.uploadButton.ClientID %>').click();
}
});
});
</script>
<input id="fileInput" name="fileInput" type="file" runat="server" style="display:none" />
<input id="fileDest" name="fileDest" type="text" runat="server" style="display:none"/>
<input id="uTypes" name="uTypes" type="text" runat="server" style="display:none"/>
<asp:Button ID="uploadButton" runat="server" CssClass="hidden" OnClick="uploadButton_Clicked" CausesValidation="false"/>
Questo è il codice dietro la sezione del controllo, alcuni dei parametri che vedete sono passati in esternamente
//Code behind
public partial class UploadifyUpload : System.Web.UI.UserControl
{
private string fileDestination;
public string FileDestination
{
get { return fileDestination; }
set { fileDestination = value; }
}
private string uploadTypes;
public string UploadTypes
{
get { return uploadTypes; }
set { uploadTypes = value; }
}
public event EventHandler UploadButtonClicked;
protected void Page_Load(object sender, EventArgs e)
{
string virtualPath = fileDestination.Replace(Request.PhysicalApplicationPath, "/");
virtualPath = virtualPath.Replace('\\', '/');
this.fileDest.Value = virtualPath;
this.uTypes.Value = uploadTypes;
}
protected void uploadButton_Clicked(object sender, EventArgs e)
{
if (this.UploadButtonClicked != null)
{
this.UploadButtonClicked(this, new EventArgs());
}
}
}
creo il controllo come questo e passano in alcune variabili. La destinazione del file e l'evento click sono gestiti nel codebehind di qualunque pagina sta usando il controllo.
<mgmtControls:UploadifyUpload ID="uploadifyUpload" runat="server" UploadTypes="*.jpg;*.png;*.gif;*.bmp;*.jpeg" />
this.uploadifyUpload.UploadButtonClicked += new EventHandler(UploadifyUploadClicked);
this.uploadifyUpload.FileDestination = DocumentPath;
Questo funziona perfettamente per me in Firefox, Chrome e IE, dovrebbe guidarti nella giusta direzione. Potresti prendere in considerazione l'aggiunta di un'opzione di caricamento predefinita se anche l'utente non ha installato Flash.

Questa soluzione ha funzionato benissimo per me. Ha bisogno di più riconoscimenti su questa pagina. Grazie. – tmutton
Questa è un'ottima soluzione.L'ho accorciato un po 'sostituendo "jQuery" con "$". Grazie @ Havanaud. –
Penso che questo dovrebbe funzionare senza che ogni ciclo. – sumit