在Asp.net中打印aspx文件

本文关键字:aspx 文件 打印 Asp net | 更新日期: 2023-09-27 18:10:42

我使用了下面的代码来打印HTMLdiv Contents &它工作得很好,但是当我在Aspx页面中使用Ajax控件时,它会给我一个错误消息,即:

"扩展程序控件'CalendarExtender2'不是注册的扩展程序控制。扩展程序控件必须使用RegisterExtenderControl(),然后调用RegisterScriptDescriptors()。参数名称:extenderControl"

这是我的c#代码
protected void BtnPrint_Click(object sender, EventArgs e)
{
 StringWriter stringWrite = new StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);
    Page pg = new Page();
    pg.EnableEventValidation = false;
    HtmlForm frm = new HtmlForm();
    pg.EnableEventValidation = false;
    pg.Controls.Add(frm);
    frm.Attributes.Add("runat", "server");
    frm.Controls.Add(divContent);
    pg.DesignerInitialize();
    pg.RenderControl(htmlWrite);
    string strHTML = stringWrite.ToString();
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.Write(strHTML);
    HttpContext.Current.Response.Write("<script>window.print();</script>");
    HttpContext.Current.Response.End();
}

这是我的Aspx代码

<%@ Page Title="" Language="C#" MasterPageFile="~/Masters/TSAMaster.master"      AutoEventWireup="true"
EnableEventValidation="false" Theme="skinFiles" CodeFile="AdminHome.aspx.cs"
Inherits="Masters_Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<script type="text/javascript">
    function ValidateDate() {
        isValidDate = ValidateDate();
        if (!isValidDate) {
            return false;
        }
        else {
            return true;
        }
    }
    function ValidateDate() {
        var Fdate = document.getElementById('ctl00_ContentPlaceHolder1_txtFDate').value;
        var Tdate = document.getElementById('ctl00_ContentPlaceHolder1_txtTDate').value;
        var todaysDate = formatDate(new Date(), 'dd/MM/yyyy');
        var isValidDate = true;
        var flag;
        if (trim(Fdate) != 0 || trim(Tdate) != 0) {
            if (!isDate(Fdate, 'dd/MM/yyyy')) {
                alert("Please select valid From Date enter into (dd/MM/yyyy) format");
                document.getElementById('ctl00_ContentPlaceHolder1_txtFDate').focus();
                return false;
            }
            if (!isDate(Tdate, 'dd/MM/yyyy')) {
                alert("Please select valid To Date enter into (dd/MM/yyyy) format ");
                document.getElementById('ctl00_ContentPlaceHolder1_txtFDate').focus();
                return false;
            }
            if (((compareDates(Fdate, 'dd/MM/yyyy', Tdate, 'dd/MM/yyyy')) == 1)) {
                alert("To date cannot be less than From Date ");
                return false;
            }
            return true;
        }
    }
    function trim(str) {
        return str.replace(/^['s]+/, '').replace(/['s]+$/, '').replace(/['s]{2,}/, ' ');
    }
</script>
<ajaxToolkit:ToolkitScriptManager runat="Server" EnableScriptGlobalization="true"
    EnableScriptLocalization="true" ID="ScriptManager1" />
<center>
    <div class="divContainPage" id="divContent" runat="server">
        <table id="tblHead" runat="server">
            <tr>
                <td>
                    <asp:Label ID="Label3" runat="server" Text="DueDate Report" Font-Bold="True" Font-Names="Verdana"
                        Font-Size="Large" ForeColor="#C80000"></asp:Label>
                    &nbsp;<br />
                    <br />
                    <table id="tbl1" runat="server" style="width: 823px">
                        <tr>
                            <td>
                                Select Payment Mode:
                            </td>
                            <td>
                                <asp:DropDownList ID="ddlPayMode" runat="server" CssClass="DropDown" Width="85px">
                                    <asp:ListItem>--Select--</asp:ListItem>
                                    <asp:ListItem>Cash</asp:ListItem>
                                    <asp:ListItem>Cheque</asp:ListItem>
                                </asp:DropDownList>
                            </td>
                            <td>
                                From Date:
                            </td>
                            <td>
                                <asp:TextBox ID="txtFDate" runat="server" Width="110px"></asp:TextBox>
                                <asp:ImageButton ID="imgCalendar" runat="server" ImageUrl="~/Images/calendar.png"
                                    TabIndex="1" />
                                <ajaxToolkit:CalendarExtender ID="CalendarExtender2" runat="server" TargetControlID="txtFDate"
                                    Format="dd/MM/yyyy" PopupPosition="BottomRight" PopupButtonID="imgCalendar" />
                            </td>
                            <td>
                                To Date:
                            </td>
                            <td>
                                <asp:TextBox ID="txtTDate" runat="server" Width="110px"></asp:TextBox>
                                <asp:ImageButton ID="imgCalendar1" runat="server" ImageUrl="~/Images/calendar.png"
                                    TabIndex="2" />
                                <ajaxToolkit:CalendarExtender ID="CalendarExtender3" runat="server" TargetControlID="txtTDate"
                                    Format="dd/MM/yyyy" PopupPosition="BottomRight" PopupButtonID="imgCalendar1" />
                            </td>
                            <td>
                                <asp:Button ID="btnGo" runat="server" Text="Go" OnClick="btnGo_Click" OnClientClick="return ValidateDate();" />
                            </td>
                            <td>
                                <asp:Button ID="btnReset" runat="server" Text="Reset" OnClick="btnReset_Click" Width="47px" />
                            </td>
                        </tr>
                    </table>
                    <table style="width: 600px" runat="server" id="tblone">
                        <tr>
                            <td>
                                <asp:GridView ID="grdStudentInfo" runat="server" SkinID="Professional" DataKeyNames="StudentID"
                                    Width="800px" AllowSorting="True" AutoGenerateColumns="False" BackColor="#DEBA84"
                                    BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2"
                                    OnSorting="grdStudentInfo_sorting" AllowPaging="True" OnPageIndexChanging="grdStudentInfo_PageIndexChanging"
                                    OnRowCommand="grdStudent_RowCommand">
                                    <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
                                    <Columns>
                                        <asp:BoundField HeaderText="Name" DataField="FirstandLastName" SortExpression="FirstandLastName">
                                            <ItemStyle HorizontalAlign="left" Width="100px" />
                                            <HeaderStyle HorizontalAlign="left" Width="100px" />
                                        </asp:BoundField>
                                        <asp:BoundField HeaderText="Amount Due" DataField="FirstInstallmentFee" SortExpression="FirstInstallmentFee">
                                            <ItemStyle HorizontalAlign="left" Width="100px" />
                                            <HeaderStyle HorizontalAlign="left" Width="100px" />
                                        </asp:BoundField>
                                        <asp:BoundField HeaderText="Payment Mode" DataField="FirstInsMode" SortExpression="FirstInsMode">
                                            <ItemStyle HorizontalAlign="left" Width="100px" />
                                            <HeaderStyle HorizontalAlign="left" Width="100px" />
                                        </asp:BoundField>
                                        <asp:BoundField HeaderText="Bank Name" DataField="FirstBankName" SortExpression="FirstBankName">
                                            <ItemStyle HorizontalAlign="left" Width="200px" />
                                            <HeaderStyle HorizontalAlign="left" Width="200px" />
                                        </asp:BoundField>
                                        <asp:BoundField HeaderText="Cheque Number" DataField="FirstChequeNumber" SortExpression="FirstChequeNumber">
                                            <ItemStyle HorizontalAlign="left" Width="200px" />
                                            <HeaderStyle HorizontalAlign="left" Width="200px" />
                                        </asp:BoundField>
                                        <asp:BoundField HeaderText="Due Date" DataField="FirstInstallmentDate" SortExpression="FirstInstallmentDate">
                                            <ItemStyle HorizontalAlign="left" Width="200px" />
                                            <HeaderStyle HorizontalAlign="left" Width="200px" />
                                        </asp:BoundField>
                                        <asp:TemplateField HeaderText="Edit">
                                            <ItemTemplate>
                                                <asp:LinkButton ID="lnkEdit" runat="server" CommandName="editStudent" Text="Edit"
                                                    CommandArgument='<%#Eval("StudentID")%>'></asp:LinkButton>
                                            </ItemTemplate>
                                            <ItemStyle HorizontalAlign="Left" Width="200px" />
                                            <HeaderStyle HorizontalAlign="Left" Width="200px" />
                                        </asp:TemplateField>
                                    </Columns>
                                    <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
                                    <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
                                    <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
                                    <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
                                </asp:GridView>
                            </td>
                        </tr>
                    </table>
                    <table id="tbl3" runat="server">
                        <tr style="height: 30px;">
                            <td>
                                <asp:Button ID="btnExport2PDF" runat="server" Text="Export To PDF" OnClick="btnExport2PDF_Click" />
                            </td>
                            <td>
                                <asp:Button ID="btnExport2XLS" runat="server" Text="Export To XLS" OnClick="btnExport2XLS_Click" />
                                <asp:HiddenField ID="hidSort" runat="server" Value="1" />
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </div>
</center>

如果我使用frm.Controls.Add(tblOne)而不是frm.Controls.Add(divContent),那么它的工作很好,因为tblone没有Ajax控件。但是divContent既具有表又具有Ajax控件,因此会抛出上述异常。我尝试了许多选项,如覆盖OnInitOnPreRender,但不适合我。

在Asp.net中打印aspx文件

这可能是由于在代码中放置了ToolkitScriptManager。看看这是否解决了你的问题:
错误:扩展程序控件可能没有在PreRender

之前注册

最后我用JavaScript代码解决了这个问题&这对我来说效果更好,我要感谢所有付出宝贵时间的人。反馈。代码在这里:

<script>
    function Panel1() {
        var panel = document.getElementById("<%=printablediv.ClientID %>");
        var printWindow = window.open('', '', 'height=400,width=800');
        printWindow.document.write('<html><head><title>newTable</title>');
        printWindow.document.write('</head><body >');
        printWindow.document.write(panel.innerHTML);
        printWindow.document.write('</body></html>');
        printWindow.document.close();
        setTimeout(function() {
            printWindow.print();
            printWindow.close();
        }, 1000);
        return false;
    }
    </script>