ASP.NET页面方法-文件上载

ASP.NET页面方法-文件上载,asp.net,asp.net-ajax,Asp.net,Asp.net Ajax,我正在尝试创建ajaxy文件上载 以下是asp代码: <input type="file" id="supportingDocs" runat="server"/> <input type="button" id="uploadBtn" onclick="upload();" value="Upload"/> 以下是相关的C#代码: 我试图从请求中获取HttpFilesCollection,它是空的。我知道PageMethods不遵循正常的asp.net生命周期。但是,

我正在尝试创建ajaxy文件上载

以下是asp代码:

<input type="file" id="supportingDocs" runat="server"/>
<input type="button" id="uploadBtn" onclick="upload();" value="Upload"/>
以下是相关的C#代码:


我试图从请求中获取HttpFilesCollection,它是空的。我知道PageMethods不遵循正常的asp.net生命周期。但是,在调试过程中,在单步执行代码时查看HttpRequest对象,我发现请求中的所有内容都在那里,但“Files”属性为空。我可能在这里漏掉了一些东西,这种上传文件的方法甚至是不可能的。

你可以只使用Ajax控件工具包提供的一个,即

你可以考虑jQuery插件:

文件上载控件通过将post请求与文件内容一起发送回服务器来工作。这就是文件上传的构建方式。这样说来,我不知道所有这些文件上传插件的内部工作是如何运作的,但即使是在ASP.NET Ajax服务之外,也可以考虑其他一些服务。p> 如果您想使用服务,可以尝试Sys.Net.webservicecoproxy.invoke方法,该方法使您能够控制post,序列化要发布到服务器的表单数据。同样,从理论上讲,我不能100%确定这一切是如何通过AJAX实现的


HTH.

如果您想上传一个文件而不进行完整回发,请尝试。它有一个非常好的文件浏览器选项和其他功能,不像ASP.NET AJAX AsyncFileUpload看起来非常有限

SWFUpload演示:

一个流行的jquery选项是uploadify,请参阅

如果没有flash,我永远无法实现异步文件上传

更新


声称AsyncFileUpload不使用flash,因此这可能比uploadify和SWFUpload有优势。

好,所以我最终使用了asp async upload和page方法

AsyncFileUpload在实际将文件保存到服务器上时效果很好,但我仍然需要运行一些服务器端代码来写出数据库,并列出上载到服务器的当前文件。不幸的是,您在客户端更改的任何内容都不会被呈现,因为上传后没有回发。所以我只是将OnClientUploadComplete设置为使用page方法的JS函数

ASP代码:

<asp:AsyncFileUpload ID="asyncFileUpload" runat="server"  OnUploadedComplete="uploadFile" OnClientUploadComplete="showUploadedFiles" ThrobberID="uploading"/>

Javascript:

function upload()
{
    PageMethods.uploadFile($get('supportingDocs').value, onSucceed, onFail);
}
    function showUploadedFiles()
    {
        PageMethods.getUploadedFiles(onSucceed, onFail);
    }

    function deleteDoc(docId)
    {
        PageMethods.deleteDocument(docId, onSucceed, onFail);
    }

    function onSucceed(result, userContext, methodName)
    {
        $get('uploadedFiles').innerHTML = result;
    }

    function onFail(error, userContext, methodName)
    {
        $get('uploadedFiles').innerHTML = "<p style='color: red;'>AJAX Error!</p>";
    }
函数showUploadedFiles()
{
getUploadedFiles(onSucceed、onFail);
}
函数deleteDoc(docId)
{
PageMethods.deleteDocument(docId、onSucceed、onFail);
}
函数onSucceed(结果、用户上下文、方法名)
{
$get('uploadedFiles')。innerHTML=result;
}
函数onFail(错误、用户上下文、方法名)
{
$get('uploadedFiles').innerHTML=“