Index: xhrMultiPart.js
===================================================================
--- xhrMultiPart.js	(revision 12315)
+++ xhrMultiPart.js	(working copy)
@@ -36,8 +36,19 @@
 	}
 
 	function _partsFromNode(node, boundary){
-		// TODO: write this function!
 		var tmp = [];
+		q = dojo.formToQuery(node).split('&');
+		if(q.length){
+			for(var i = 0; i < q.length; ++i){
+				if(q[i].length){
+					var p = q[i].split("=");
+					tmp.push(	"--" + boundary,
+							"Content-Disposition: form-data; name=\"" + p[0] + "\"",
+							"",
+							p[1]);
+				}
+			}
+		}
 		return tmp;
 	}
 
@@ -45,7 +56,9 @@
 		if(!args["file"] && !args["form"]){
 			throw new Error("file or form must be provided to dojox.io.xhrMultiPart's arguments");
 		}
-
+		if(_needIframe(args["form"])){
+			console.error("dojox.io.xhrMultiPart cannot support files due to iframe requirements and incompatible callback requirements associated with iframes, please us dojo.io.iframe.send(args) instead.");
+		}
 		// unique guid as a boundary value for multipart posts
 		var boundary = dojox.uuid.generateRandomUuid();
 
@@ -68,10 +81,9 @@
 			tmp.push("--"+boundary+"--", "");
 			out = tmp.join("\r\n");
 		}
-
 		return dojo.rawXhrPost(dojo.mixin(args, {
 			contentType: "multipart/form-data; boundary=" + boundary,
 			postData: out
 		}));
 	}
-})();
+})();
\ No newline at end of file
