Asp.net 为什么下载一个不工作的文件保存在模型弹出窗口中?

Asp.net 为什么下载一个不工作的文件保存在模型弹出窗口中?,asp.net,ajaxcontroltoolkit,Asp.net,Ajaxcontroltoolkit,我正在打开一个面板,上面有这样的代码 <td rowspan="2"> <br /> <asp:UpdatePanel ID="updatePnl" runat="server"> <ContentTemplate> <asp:

我正在打开一个面板,上面有这样的代码

 <td rowspan="2">
                        <br />
                        <asp:UpdatePanel ID="updatePnl" runat="server">
                            <ContentTemplate>
                                <asp:LinkButton ID="lnkYurLevel" runat="server" ForeColor="#009999" Text="What are my next steps?"
                                    Font-Size="Medium" OnClick="lnkYurLevel_Click"></asp:LinkButton>
                            </ContentTemplate>
                        </asp:UpdatePanel>
                    </td>

 protected void lnkYurLevel_Click(object sender, EventArgs e)
    {
        if (lblFileName.Text != "")
        {
            string path = Server.MapPath(@"~\downloads\" + lblFileName.Text);
            System.IO.FileInfo file = new System.IO.FileInfo(path);
            if (file.Exists)
            {
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                Response.AddHeader("Content-Length", file.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.WriteFile(file.FullName);
                Response.End();
            }
            else
            {
                Response.Write("This file does not exist.");
            }
        }

    }
<Triggers>
    <asp:PostBackTrigger ControlID="lnkYurLevel" />
</Triggers>
在点击按钮时,我打开了一个要下载的文件,但下载的文件并没有出现,因为它并没有保存在面板中,而是通过模型弹出窗口打开。 现在,当它放置在面板中时,将通过模型弹出窗口打开。它不起作用。
原因是什么?

您使用的UpdatePanel,期望非常具体的数据实际等待一个结构,并带有发回的结果,这些数据在javascript上用于更新其内容。你所做的就是完全破坏这些数据,你仍然希望工作。这无法工作,您会从页面、updatepanel中收到一个javascript错误。换言之,更新面板从您那里获取一些不知道如何处理的数据。

您使用的UpdatePanel,期望非常具体的数据实际等待具有发回结果的结构,这些数据在javascript上用于更新其内容。你所做的就是完全破坏这些数据,你仍然希望工作。这无法工作,您会从页面、updatepanel中收到一个javascript错误。换言之,更新面板从您那里获取一些不知道如何处理的数据。

更新面板中的操作不会改变整个响应,只是页面的一部分。所以你不能期望得到回应。写信去工作吧。另一种方法是使按钮强制执行完全回发 向asp:按钮添加一个PostBackTrigger,如下所示

 <td rowspan="2">
                        <br />
                        <asp:UpdatePanel ID="updatePnl" runat="server">
                            <ContentTemplate>
                                <asp:LinkButton ID="lnkYurLevel" runat="server" ForeColor="#009999" Text="What are my next steps?"
                                    Font-Size="Medium" OnClick="lnkYurLevel_Click"></asp:LinkButton>
                            </ContentTemplate>
                        </asp:UpdatePanel>
                    </td>

 protected void lnkYurLevel_Click(object sender, EventArgs e)
    {
        if (lblFileName.Text != "")
        {
            string path = Server.MapPath(@"~\downloads\" + lblFileName.Text);
            System.IO.FileInfo file = new System.IO.FileInfo(path);
            if (file.Exists)
            {
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                Response.AddHeader("Content-Length", file.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.WriteFile(file.FullName);
                Response.End();
            }
            else
            {
                Response.Write("This file does not exist.");
            }
        }

    }
<Triggers>
    <asp:PostBackTrigger ControlID="lnkYurLevel" />
</Triggers>
UpdatePanel中的操作不会改变整个响应,只是页面的一部分。所以你不能期望得到回应。写信去工作吧。另一种方法是使按钮强制执行完全回发 向asp:按钮添加一个PostBackTrigger,如下所示

 <td rowspan="2">
                        <br />
                        <asp:UpdatePanel ID="updatePnl" runat="server">
                            <ContentTemplate>
                                <asp:LinkButton ID="lnkYurLevel" runat="server" ForeColor="#009999" Text="What are my next steps?"
                                    Font-Size="Medium" OnClick="lnkYurLevel_Click"></asp:LinkButton>
                            </ContentTemplate>
                        </asp:UpdatePanel>
                    </td>

 protected void lnkYurLevel_Click(object sender, EventArgs e)
    {
        if (lblFileName.Text != "")
        {
            string path = Server.MapPath(@"~\downloads\" + lblFileName.Text);
            System.IO.FileInfo file = new System.IO.FileInfo(path);
            if (file.Exists)
            {
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                Response.AddHeader("Content-Length", file.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.WriteFile(file.FullName);
                Response.End();
            }
            else
            {
                Response.Write("This file does not exist.");
            }
        }

    }
<Triggers>
    <asp:PostBackTrigger ControlID="lnkYurLevel" />
</Triggers>

因此,如何使其正确,文件被创建,但“保存”对话框从未出现在客户端上。@NearketToDotnet是的,因为您有一个UpdatePanel将其扭曲。@NearketToDotnet我想说,这种方式也不是好的做法,是一种简单的解决方案,但不是asp.net页面的正确解决方案。更好的解决方案是使用句柄发送文件,您只需使用正确的url参数创建指向该句柄的链接。@NeareorToDotnet和此Response.WriteThis文件不存在。;你有没有看过它要写什么,写在哪里?做个测试看看。也许在这一页的末尾,也许在上面。。。但是它将是不可读的,除非你的页面是一个空白的白色。因此,如何使它正确,文件会被创建,但“保存”对话框永远不会出现在客户端上。@NearketToDotnet是的,因为你有一个UpdatePanel来扭曲它。@NearketToDotnet我想说,这种方式也不是很好的做法,是一个简单的解决方案,但这不是asp.net页面的正确解决方案。更好的解决方案是使用句柄发送文件,您只需使用正确的url参数创建指向该句柄的链接。@NeareorToDotnet和此Response.WriteThis文件不存在。;你有没有看过它要写什么,写在哪里?做个测试看看。也许在这一页的末尾,也许在上面。。。但是它将是不可读的,除非你的页面是一个空白的白色。文件被创建,但保存对话框从未出现在客户端上。文件被创建,但保存对话框从未出现在客户端上。是的,它确实工作,但我的问题是,在,当我没有定义触发器时,断点被击中了。@NearketToDotnet:第一行用简单的术语解释了原因。“不是吗?”亚里士多德:对不起。我认为是有人点击了“快乐”:是的,它确实有效,但我的问题是我必须定义什么触发器,而当我没有定义触发器时,断点被击中了。@NearketToDotnet:第一行用简单的术语解释了原因。“不是吗?”亚里士多德:对不起。我觉得是有人在开玩笑: