use*_*814 5 c# asp.net ajax gridview asyncfileupload
我AsyncFileUpload在网页上实现了控件.此网页要求上传的文件显示在GridView.
将GridView包含以下栏目:" 文件名 "," 机密 "复选框和" 删除 "按钮来删除上传的文件.
由于AsyncFileUpload回发不执行整页回发,因此我需要OnClientUploadComplete在AsyncFileUpload控件的事件上"强制"回发,以便在上载文件后呈现gridview.
在OnClientUploadCompleteEvent,我用javascript来调用__doPostBack.在这个回发中,我只绑定我的GridView并显示文件信息(我不重新保存文件).
问题:在AsyncFileUpload第一个"部分"回发时,文件已按预期成功上传.在我强制使用的第二个回发中__doPostBack,文件被重新上传.
您可以使用显示上传进度的Google Chrome来验证这一点.行为如下:
- 选择文件后,进度从0%增加到100%并上载文件.
- __doPostBack执行此操作后,您可以再次看到上载进度从0%增加到100%.
如何确保Gridview已正确填充,但文件未上载两次?
我附上了一个包含问题的示例解决方案:https: //www.yousendit.com/download/MzZFc2ZBNDRrYUN4dnc9PQ
也许丑陋,但有效:
1) 在 asp:AsyncFileUpload 控件下方添加一个 css 隐藏的 asp:Button AsyncFileUpload1。
<asp:Button runat="server" ID="btnClick" Text="Update grid" style="display:none"/>
Run Code Online (Sandbox Code Playgroud)
2) 在该Page_Load方法上,删除if (Request.Params.Get("__EVENTTARGET") == "UploadPostback")并将其块放入else前一个的简单块中if。
3) 在AsyncFileUpload1_UploadedComplete函数上,也删除该if (Request.Params.Get("__EVENTTARGET") != "UploadPostback")行,但保留其中的所有内容。
4)回到aspx。在网格 GridView1 之外放置一个 asp:UpdatePanel。
<asp:UpdatePanel runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnClick" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:GridView ID="GridView1" ...
YOUR GRID CODE REMAINS THE SAME
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
5) 最后一步是更改AjaxUploadComplete客户端 JavaScript 函数以使其触发回发。将其替换为以下内容:
function AjaxUploadComplete() {
var btnClick = document.getElementById("btnClick");
btnClick.click();
}
Run Code Online (Sandbox Code Playgroud)
用户选择的任何文件仅上传一次。
这里的所有更改都应在 AjaxUpload.zip 的 AjaxUpload.aspx 和 AjaxUpload.aspx.cs 中进行。