2

我正在寻找某种行为,其中 ModalPopup 为要下载的文件建议一个(业务规则驱动的)文件名。

在此处输入图像描述

如果用户单击确定,则文件已下载,并且弹出窗口应关闭。取消只是关闭它。这都是由后面的代码驱动的:

protected void ExportPromptOkButton_Clicked(object sender, EventArgs e)
{
    string path = MapPath(ExportPromptPanelFileName.Text);
    WriteExport(path);
    ExportPromptModalPopupExtender.Hide();
    this.SendFile(path, "text/plain");
}

//...

public static void SendFile(this Page webPage, string filepath, string contenttype)
{
    webPage.Response.AddHeader("Content-disposition", "attachment; filename=" + Path.GetFileName(filepath));
    webPage.Response.ContentType = contenttype;
    webPage.Response.WriteFile(filepath);;
    webPage.Response.End();
}

问题是Response.End();杀死所有动作(好吧,应该如此),所以模态窗口本身不会关闭。

什么是正确的方法?我正在考虑使用 iframe 并调用它Response来发送文件,但我想确认这是否合适或者是否有更好的东西。

ASPX 声明:

<ajaxToolkit:ModalPopupExtender 
    runat="server" 
    ID="ExportPromptModalPopupExtender" 
    BackgroundCssClass="modalBackground"
    TargetControlID="ExportButton" 
    PopupControlID="ExportPromptPanel" 
    PopupDragHandleControlID="ExportPromptPanelHeader"
    CancelControlID="ExportPromptCancelButton"
    Drag="true">
</ajaxToolkit:ModalPopupExtender>
<asp:Panel ID="ExportPromptPanel" runat="server" CssClass="popupConfirmation" style="display: none;">
    <div class="popupContainer" style="width:300px">
        <div class="popupHeader" id="ExportPromptPanelHeader">
            <div class="popupHeaderLeft">Export</div><div class="popupHeaderRight"></div>
        </div>
        <div class="popupBody">Export under the following name:<br />
        <asp:TextBox ID="ExportPromptPanelFileName" runat="server" MaxLength="60" Width="230px"></asp:TextBox></div><div class="popupButtons">
            <asp:Button ID="ExportPromptOkButton" runat="server" Text="Ok" OnClick="ExportPromptOkButton_Clicked" />
            <asp:Button ID="ExportPromptCancelButton" runat="server" Text="Cancel" />
        </div>
    </div>
</asp:Panel>
4

3 回答 3

2

您可以设置OkControlID扩展器的属性以隐藏Ok按钮单击时的弹出窗口和OnOkScript自定义 JavaScript 函数的属性,这将强制从 Ok 按钮回发(模式弹出扩展器阻止来自 Ok 和 Cancel 控件的回发)。

<script type="text/javascript">
    function doExport() {
        __doPostBack("<%= ExportPromptOkButton.UniqueID %>", "");
    }
</script>


<ajaxToolkit:ModalPopupExtender
    runat="server"
    ID="ExportPromptModalPopupExtender"
    BackgroundCssClass="modalBackground"
    TargetControlID="ExportButton"
    PopupControlID="ExportPromptPanel"
    PopupDragHandleControlID="ExportPromptPanelHeader"
    CancelControlID="ExportPromptCancelButton"
    OkControlID="ExportPromptOkButton"
    OnOkScript="doExport"
    Drag="true">
</ajaxToolkit:ModalPopupExtender>
于 2013-07-31T06:16:55.483 回答
1

您需要制作一个单独的 http 处理程序来处理请求在 Modal Popup 中调用 HTTP HANDLER,如图所示

在 ModalPopup 中:

protected void Click(object sender, EventArgs e)
    {
        Response.Redirect("Handler1.ashx", true);
    }

在 Handler1.ashx

public void ProcessRequest(HttpContext context)
    {
        context.Response.Clear();
        context.Response.ContentType = "application/vnd-ms.excel";
        context.Response.AddHeader("content-disposition", "attachment;Filename=test.xls");
        context.Response.WriteFile(filepath);
        context.Response.Flush();
        context.Response.End();
    }
于 2013-07-30T16:16:19.917 回答
0

您是否尝试过 ModalPopupExtender.hide() !

于 2013-07-30T16:31:52.703 回答