Here's how I do ajax-like uploads in an inner FORM/IFRAME
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<link href="../css/AWCOffice.css"rel="stylesheet" type="text/css" />
<link href="../css/Final.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" onsubmit="return false;" runat="server">
<div id="acs-edit-bidsbid" style="padding-left: 10px; padding-top: 10px;">
.
.
. Step #1 - Browse for file to upload and click Upload button
<span class="acs-span-large">Upload Key</span>
<label class="awc-UpId awc-ctrlval1 acs-edit-small-text"></label>
<br />
<br />
<form action="Upload.ashx" method="post" enctype="multipart/form-data" target="upload_target_view1">
<div>
<label>
<input type="file" name="file" multiple>
</label>
<br /><br />
<button type="submit" name="username" value="(awc_UploadCreate_Bid)" class="ui-button ui-widget ui-state-highlight ui-corner-all ui-button-text-icon-acs-use ui-button-text-icon-primary" role="button" aria-disabled="false">Upload</button>
</div>
<iframe name="upload_target_view1" class="acs-dlg-upload">
<html>
<head></head>
<body></body>
</html>
</iframe>
</form>
<ul id="filelist">
</ul>
<br />
Then using jQuery I "find" that DIV with the CSS "acs-dlg-upload"
Code:
wesUP = wesEP.find(".acs-dlg-upload");
if (wesUP.length != 0) {
wesUPS = wesUP.siblings().find("button:submit");
strUPS = wesUPS.attr("value") || "";
strUPS = (window.username || "") + strUPS;
wesUPS.attr("value", strUPS)
wesUP.load(function () {
var strResult = wesUP.contents().find("body").html();
if (strResult.length != 0) {
uploadComplete(strEditPanel, strResult);
}
return false;
});
}
That wires up the uploadComplete function for the LOAD event of the IFRAME
Code:
function uploadComplete(strId, strResult) {
var returnObj = $.parseJSON(strResult);
var updArr = returnObj.update || [];
var strData = "";
var wesAWC = [];
for (var i = 0; i < updArr.length; i = i + 2) {
strData = updArr[i + 1];
wesAWC = $(strId + " .awc-" + updArr[i]).not(".acs-edit-view-hidden");
p_fillField(wesAWC, strData, strId, updArr[i], false);
}
if (returnObj.ok) {
errorMessage("Upload Complete", returnObj.message);
} else {
errorMessage("Upload DID NOT Complete", returnObj.message);
}
return false;
}
And the FORM talks to an upload page - indicated in this line of the HTML
<form action="Upload.ashx" method="post" enctype="multipart/form-data" target="upload_target_view1">
And that page - in VB.Net - looks like this
Code:
<%@ WebHandler Language="VB" Class="Upload" %>
Imports System
Imports System.Web
Imports System.IO
Imports System.Data
Imports System.Data.SqlClient
Public Class Upload : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim username As String = context.Request.Params("username")
Dim credDB As String = ""
Dim overSproc As String = ""
If username.EndsWith(")") Then
Dim cp As Integer = username.LastIndexOf("(")
overSproc = username.Substring(cp + 1, username.Length - cp - 2)
username = username.Substring(0, cp)
End If
If username.Contains(":") Then
credDB = username.Split(":"c)(0)
username = username.Split(":"c)(1)
End If
Dim postedFile As HttpPostedFile = context.Request.Files("file")
which finishes up like this
Code:
postedFile.SaveAs(Path.Combine(savepath, StoredFileName))
strResp &= "{ ""ok"": true"
strResp &= ", ""message"": """ & Message & """"
strResp &= ", ""update"": " & Update
strResp &= "}"
context.Response.Write(strResp) 'filename)
context.Response.StatusCode = 200
End If
End If
Catch ex As Exception
strResp = "{""ok"": false, ""message"": ""Error: " & ex.Message.Replace("""", "'").Replace("\", "\\") & ".""}"
context.Response.Write(strResp) 'filename)
context.Response.StatusCode = 200
End Try
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class