本文介绍了没有更多的回发在SharePoint文件下载后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从SharePoint下载文件。
但我下载此文件后,我不能点击其他按钮。
什么是错我的编码?

这是我的第一个方法。

This is my second way

I even comment Response.End() but still the same result.

Is there any other way I should tried?

Any help would be really appreciated.In fact, I posted this question a few days ago, but only one gave me my second way to try but it is still not working.

Thanks.

UPDATE

Here is my GridView under GridView.

           <asp:GridView ID="gvGiro" Width="100%" runat="server" GridLines="Both" AllowPaging="false" CssClass="form-table" ShowHeader="false"
                AllowSorting="false" AutoGenerateColumns="false" OnRowDataBound="gvGiro_RowDataBound">
                <Columns>
                    <asp:TemplateField ItemStyle-Width="20%" ItemStyle-HorizontalAlign="Center">
                        <ItemTemplate>
                            <asp:Label ID="lblValueDate" Text='<%# getDate(Eval("ValueDate")) %>' runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>

                            <asp:GridView ID="gvDetail" runat="server" AllowPaging="false" AllowSorting="false" 
                                CssClass="list-table border" HeaderStyle-CssClass="header" AutoGenerateColumns="false">
                                <Columns>
                                    <asp:TemplateField HeaderText="Sequence Number" ItemStyle-HorizontalAlign="Left"
                                        ItemStyle-Width="30%" >
                                        <ItemTemplate>
                                            <%#((DataRowView)Container.DataItem)["MessageSeqNbr"] %>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Total Number of Debit Transaction" ItemStyle-HorizontalAlign="Left"
                                        HeaderStyle-HorizontalAlign="Center">
                                        <ItemTemplate>
                                            <%#((DataRowView)Container.DataItem)["TotalDebitNbr"] %>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Status" ItemStyle-HorizontalAlign="Left" ItemStyle-Width="25%"
                                        HeaderStyle-HorizontalAlign="Center">
                                        <ItemTemplate>
                                            <%#((DataRowView)Container.DataItem)["CodeDesc"] %>
                                            <asp:HiddenField ID="hidCode" runat="server" Value='<%#((DataRowView)Container.DataItem)["Code"] %>' />
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Action" ItemStyle-HorizontalAlign="Center" ItemStyle-Width="10%"
                                        HeaderStyle-HorizontalAlign="Center">
                                        <ItemTemplate>
                                        <asp:Button ID="btnDownload" runat="server" CssClass="button submit" Text="Download" 
                                CommandName="download" OnCommand="onCmd" CommandArgument='<%#Eval("Id") %>' Width="80px"/>
                                        <asp:Button ID="btnUnbatch" runat="server" CssClass="button generic" Text="Un-Batch"
                                CommandName="unbatch" OnCommand="onCmd" CommandArgument='<%#Eval("Id") %>' Width="80px"/>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                </Columns>
                            </asp:GridView>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

Here is my cs file

    protected void gvGiro_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        GridView gr;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            gr = (GridView) e.Row.FindControl("gvDetail");
            using (class2 ct2= new Class2())
            {
                Label lblValueDate = (Label)e.Row.FindControl("lblValueDate");
                DateTime dt= DateTime.MinValue;
                DataSet ds= ct2.GetData(dt);
                gr.DataSource = ds; 
                gr.DataBind();

            }

        }
    }


protected void onCmd(object sender, CommandEventArgs e)
    {
        string id;
        switch (e.CommandName)
        {
            case "unbatch":
                id= e.CommandArgument.ToString();
                Unbatch(id);
                break;
            case"download":
                id= e.CommandArgument.ToString();
                Download(id);
                break;
            default:
                break;
        }
    }

    protected void Download(string id)
    {
        // to do - substitute all hard-code guid
        Guid batchId = new Guid(id);
        string fileName = "";
        Class1 ct = new Class1();


        {
            if (!ct.FileExists(batchId , ref fileName))
            {
                byte[] bytes = System.IO.File.ReadAllBytes("D:\\" + fileName);
            Response.ClearContent();
            Response.ClearHeaders();
            Response.AddHeader("Content-Type", "application/octet-stream");
            Response.AddHeader("Content-Length", bytes.Length.ToString());
            Response.AddHeader("content-disposition", "attachment; filename= " + fileName);
            Response.BinaryWrite(bytes);
            Response.Flush();
            Response.End();
            }
解决方案

SharePoint registers a JavaScript "on submit" handler. In this handler the global variable _spFormOnSubmitCalled is set to true. SharePoint uses this variable to check if a submit was executed and prevents any further submits. Since your "download postback" does not refresh the page this variable remains true. With the effect that that all other buttons stop working.

As a workaround you can set this variable to false in a client click handler on your download button:

Button btn = new Button();
btn.Text = "Download";
btn.Click += DownloadButton_Click;

// set the client click handler
btn.OnClientClick = "window.setTimeout(function() { _spFormOnSubmitCalled = false; }, 10);"

Of course thats a little hacky and is not garantueed to work in upcoming SharePoint versions.

这篇关于没有更多的回发在SharePoint文件下载后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 02:54