webform使用ajaxToolkit:ModalPopupExtender异步查询,未完成版(1)

HistoricalStatements.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="HistoricalStament.aspx.cs" Inherits="Sogo.Invest.Web.Account.HistoricalStament" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="hisStatementForm" runat="server">
     <asp:ScriptManager ID="ScriptManager1" runat="server">
    <Scripts>
    </Scripts>
    </asp:ScriptManager>
    <p>
        <asp:Label ID="lbHisStatement" runat="server" Text="Select the month and year of the Statement you want to view"></asp:Label>
    </p>
    <div>
        <table cellpadding="4" class="ContentText" width="750" border="0">
            <tr valign="top">
        <td>
                <asp:DropDownList ID="drDnYear" runat="server" AutoPostBack="True">
                    <asp:ListItem Value="2010">2010</asp:ListItem>
                    <asp:ListItem Value="2011">2011</asp:ListItem>
                    <asp:ListItem Value="2012">2012</asp:ListItem>
                    <asp:ListItem Value="2013">2013</asp:ListItem>
                </asp:DropDownList>

        </td>
        <td>

                <asp:DropDownList ID="drDnMonth" runat="server" AutoPostBack="True">
                    <asp:ListItem Value="01">January</asp:ListItem>
                    <asp:ListItem Value="02">February</asp:ListItem>
                    <asp:ListItem Value="03">March</asp:ListItem>
                    <asp:ListItem Value="04">April</asp:ListItem>
                    <asp:ListItem Value="05">May</asp:ListItem>
                    <asp:ListItem Value="06">June</asp:ListItem>
                    <asp:ListItem Value="07">July</asp:ListItem>
                    <asp:ListItem Value="08">August</asp:ListItem>
                    <asp:ListItem Value="09">September</asp:ListItem>
                    <asp:ListItem Value="10">October</asp:ListItem>
                    <asp:ListItem Value="11">November</asp:ListItem>
                    <asp:ListItem Value="12">December</asp:ListItem>
                </asp:DropDownList>

        </td>
        <td>
                <asp:Button ID="btnHisStatement" runat="server" OnClick="btnHisStatement_Click" Text="View" Width="121px" />
        </td>
        </tr>
            </table>
    </div>
        <asp:Panel ID="PanelHisStament" runat="server" DefaultButton="btnCancelHis" Style="display: none;">
        <div class="modalBox">
            <div class="modalBoxTop" id="dragPanel">
                <span>History Statement list view modal</span></div>
            <div class="modalBoxMid">
                <div class="mainModal">
                    <asp:GridView ID="hisStaGridView" runat="server" PageSize="5" AutoGenerateColumns="False"
                        Width="395px" EnableViewState="False" GridLines="None" BackColor="White" AlternatingRowStyle-BackColor="#f1f1f3">
                        <HeaderStyle Height="23px" CssClass="panelBgGridHeader" />
                        <Columns>
                            <asp:TemplateField HeaderText="Document Name">
                                <HeaderStyle HorizontalAlign="Left" />
                                <ItemStyle HorizontalAlign="Left" />
                                <ItemTemplate>
                                    <%# FormatStaName(Container.DataItem)%></ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                </div>
                <asp:Button ID="btnCancelHis" runat="server" CssClass="close-btn" Text="Close" /></div>
            <div class="modalBoxBtm">
            </div>
        </div>
    </asp:Panel>
    <ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" PopupControlID="PanelHisStament"
        TargetControlID="lbHisStatement" DropShadow="false"
        CancelControlID="btnCancelHis" BackgroundCssClass="modalBackground">
    </ajaxToolkit:ModalPopupExtender>
    </form>
</body>
</html>

HistoricalStatement.aspx.cs

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using fdfacx_clr;
using iTextSharp.text.pdf;

namespace Sogo.Invest.Web.Account
{
    public partial class HistoricalStament : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnHisStatement_Click(object sender, EventArgs e)
        {
            string filePath = System.Configuration.ConfigurationManager.AppSettings["HisStaPath"]
                              + @"\" + drDnYear.SelectedValue + @"\" + drDnMonth.SelectedValue;
            string searchPatten = UserSession.User.ClearingAccountId + @"*.pdf";

            string[] dirs = HisStaImpersonator.GetInstance().GetFiles(filePath, searchPatten);
            if (dirs.Count() > 1)
            {
                var ipageList=new List<string>();
                foreach (string dir in dirs)
                {
                    int iStart = dir.LastIndexOf('\\')+1;
                    ipageList.Add(dir.Substring(iStart, dir.Length - iStart - 4));
                }

                hisStaGridView.DataSource = ipageList;
                hisStaGridView.DataBind();
                ModalPopupExtender1.Show();                
            }
            else if (dirs.Count() ==1)
            {
                RenderStatementITextPdf(dirs[0]);
            }
            else
            {
                //message box
            }
           
        }
        protected void RenderStatementITextPdf(string filePath)
        {
            //string location = System.Configuration.ConfigurationManager.AppSettings["Location_NewAccountApplicationForm_NRA_JNT_cash"];
           if (string.IsNullOrEmpty(filePath))
            {
                return;
            }
            int iStart = filePath.LastIndexOf('\\') + 1;
            if(iStart<2) return;
            Response.ContentType = "application/pdf";
            Response.AppendHeader("Content-Disposition", "  attachment;  filename  =  " + filePath.Substring(iStart, filePath.Length - iStart - 4));

            var reader = new PdfReader(filePath);
            var stamper = new PdfStamper(reader, Response.OutputStream);
            stamper.Writer.CloseStream = false;

            stamper.Close();
            reader.Close();
            Response.Flush();
        }
        protected string FormatStaName(object item)
        {
            return item as string;
        }
    }
}

HisStaImpersonator.cs

using System;
using System.Configuration;
using System.Drawing;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Security.Principal;
using System.IO;
using Laser.Common;


namespace Sogo.Invest.Web.Account
{
    public class HisStaImpersonator
    {
        private static HisStaImpersonator instance;
        private static readonly object _lock = new object();
        private WindowsImpersonationContext _impersonationContext;
        private readonly string _user;
        private readonly string _pass;
        private IntPtr _userHandle = IntPtr.Zero;
        private IntPtr _tokenDuplicate = IntPtr.Zero;
        public static HisStaImpersonator GetInstance()
        {
            if (instance == null)
            {
                lock (_lock)
                {
                    if (instance == null)
                    {
                        instance = new HisStaImpersonator(System.Configuration.ConfigurationManager.AppSettings["HisStaDominName"], System.Configuration.ConfigurationManager.AppSettings["HisStaPW"]);
                        //instance.Login();
                    }
                }
            }
            return instance;
        }

        private HisStaImpersonator(string user, string pass)
        {
            _user = user;
            _pass = pass;
        }

        ~HisStaImpersonator()
        {
            Undo();
        }
        private bool Impersonate()
        {
            // Call LogonUser to get a token for the user
            string[] domainUser = _user.Split('\\');
            if (domainUser.Length < 2)
                throw new ConfigurationErrorsException("DomainUserName must be of the form 'domain\\username'");
            int loggedOn = LogonUser(
                domainUser[1],
                domainUser[0],
                _pass,
                (int) LogonType.LOGON32_LOGON_NEW_CREDENTIALS,
                (int) LogonProvider.LOGON32_PROVIDER_DEFAULT,
                ref _userHandle);
            if (_userHandle == IntPtr.Zero)
            {
                CloseHandle(_userHandle);
                return false;
            }

            if (loggedOn != 0 && DuplicateToken(_userHandle, 2, ref _tokenDuplicate) != 0)
            {
                var tempWindowsIdentity = new WindowsIdentity(_tokenDuplicate);
                _impersonationContext = tempWindowsIdentity.Impersonate();
            }
            if (_impersonationContext == null)
            {
                if (_userHandle != IntPtr.Zero) CloseHandle(_userHandle);
                if (_tokenDuplicate != IntPtr.Zero) CloseHandle(_tokenDuplicate);
                return false;
            }

            return true;
        }

        private void Undo()
        {
            if (_userHandle != IntPtr.Zero) CloseHandle(_userHandle);
            if (_tokenDuplicate != IntPtr.Zero) CloseHandle(_tokenDuplicate);
            if (_impersonationContext != null) _impersonationContext.Undo();
        }

        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern bool CloseHandle(IntPtr hHandle);

        [DllImport("advapi32.dll", SetLastError = true)]
        private static extern int LogonUser(
            string lpszUsername,
            string lpszDomain,
            string lpszPassword,
            int dwLogonType,
            int dwLogonProvider,
            ref IntPtr phToken
            );
        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern int DuplicateToken(IntPtr hToken,
            int impersonationLevel,
            ref IntPtr hNewToken);

        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool RevertToSelf();

        private enum LogonType : int
        {
            /// <summary>
            /// This logon type is intended for users who will be interactively using the computer, such as a user being logged on  
            /// by a terminal server, remote shell, or similar process.
            /// This logon type has the additional expense of caching logon information for disconnected operations; 
            /// therefore, it is inappropriate for some client/server applications,
            /// such as a mail server.
            /// </summary>
            LOGON32_LOGON_INTERACTIVE = 2,

            /// <summary>
            /// This logon type is intended for high performance servers to authenticate plaintext passwords.

            /// The LogonUser function does not cache credentials for this logon type.
            /// </summary>
            LOGON32_LOGON_NETWORK = 3,

            /// <summary>
            /// This logon type is intended for batch servers, where processes may be executing on behalf of a user without 
            /// their direct intervention. This type is also for higher performance servers that process many plaintext
            /// authentication attempts at a time, such as mail or Web servers. 
            /// The LogonUser function does not cache credentials for this logon type.
            /// </summary>
            LOGON32_LOGON_BATCH = 4,

            /// <summary>
            /// Indicates a service-type logon. The account provided must have the service privilege enabled.
            /// </summary>
            LOGON32_LOGON_SERVICE = 5,

            /// <summary>
            /// This logon type is for GINA DLLs that log on users who will be interactively using the computer. 
            /// This logon type can generate a unique audit record that shows when the workstation was unlocked. 
            /// </summary>
            LOGON32_LOGON_UNLOCK = 7,

            /// <summary>
            /// This logon type preserves the name and password in the authentication package, which allows the server to make 
            /// connections to other network servers while impersonating the client. A server can accept plaintext credentials 
            /// from a client, call LogonUser, verify that the user can access the system across the network, and still 
            /// communicate with other servers.
            /// NOTE: Windows NT:  This value is not supported. 
            /// </summary>
            LOGON32_LOGON_NETWORK_CLEARTEXT = 8,

            /// <summary>
            /// This logon type allows the caller to clone its current token and specify new credentials for outbound connections.
            /// The new logon session has the same local identifier but uses different credentials for other network connections. 
            /// NOTE: This logon type is supported only by the LOGON32_PROVIDER_WINNT50 logon provider.
            /// NOTE: Windows NT:  This value is not supported. 
            /// </summary>
            LOGON32_LOGON_NEW_CREDENTIALS = 9,
        }

        private enum LogonProvider : int
        {
            /// <summary>
            /// Use the standard logon provider for the system. 
            /// The default security provider is negotiate, unless you pass NULL for the domain name and the user name 
            /// is not in UPN format. In this case, the default provider is NTLM. 
            /// NOTE: Windows 2000/NT:   The default security provider is NTLM.
            /// </summary>
            LOGON32_PROVIDER_DEFAULT = 0,
        }

        #region HisStaImpersonator Members


        public void Login()
        {
            Impersonate();
        }

        public void Logout()
        {
            Undo();
        }

        public string[] GetFiles(string root, string pattern)
        {
            Impersonate();
            try
            {
                return Directory.GetFiles(root, pattern);
            }
            finally
            {
                Undo();
            }
        }
        #endregion
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值