Base Web Page

原创 2004年10月23日 13:34:00
/*
Author: Clarion Li
Date: Oct.22, 2004  (My nephew is two months old)
Purpose:
	check user login
	client call server's method(in Page or UserControl)

* /

/*
client function: 
	function CallServerMethodSkipClientValidate(methodName, methodParams)
	{                     
		document.all['__methodName'].value = methodName;
		document.all['__methodParams'].value = methodParams;
		document.forms[0].submit();
	}
	function CallServerMethod(methodName, methodParams)
	{
		if (typeof(Page_ClientValidate) != 'undefined')
		{                 
			if (!Page_ClientValidate()) return;
		}
		CallServerMethodSkipClientValidate(methodName,methodParams);
	}
	
useage:
	method on Page:	
		<INPUT onclick="CallServerMethod('Alert','Hello');" type="button" value="Button">
			"Alert" is the public method in this Page
			"Hello" is the method "Alert"'s Parameter

		
	method on UserControls:
		<INPUT type="button" onclick="CallServerMethodSkipClientValidate('<%=this.UniqueID%>*WUC','Hello');">
			"<%=this.UniqueID%>" is UserControls's UniqueID
			"WUC" is the method name in the UserControl
			"Hello" is the method "Alert"'s Parameter
	
 */


using System;
using System.Web.UI;

namespace WebApp4
{
	public class BasePage : Page
	{
		ServerMethodProxy smp = null;
			 
		protected override void OnInit(EventArgs e)
		{
			if (!this.CheckUser())
			{
				this.ForceLogin();
			}

			base.OnInit (e);

			smp = new ServerMethodProxy(this);
		}

		protected virtual bool CheckUser()
		{
			return true;
		}

		protected virtual void ForceLogin()
		{
			Response.Redirect("", true);
		}

		protected override void OnLoad(EventArgs e)
		{
			base.OnLoad (e);

			if (IsPostBack)
			{
				smp.Handle();
			}
		}

	}

	public class ServerMethodProxy : IPostBackEventHandler
	{
		private System.Web.UI.Page page;

		private const string constMethodName = "__methodName";
		private const string constMethodParams = "__methodParams";

		private string methodName = null;
		private string methodParameters = null;

		public ServerMethodProxy(System.Web.UI.Page page) 
		{
			this.page = page;
			this.RegisterClientScript();
		}

		public void Handle()
		{
			methodName = this.page.Request.Form[constMethodName];
			if (methodName + "" == "")
			{
				return;
			}

			methodParameters = this.page.Request.Form[constMethodParams];

			try
			{
				System.Type t = this.page.GetType();
				while (t.BaseType != null)
				{
					if (t.FullName == "System.Web.UI.Page")
					{
						System.Reflection.FieldInfo fi = t.GetField("_registeredControlThatRequireRaiseEvent", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
						fi.SetValue(this.page, this);
						break;
					}
					t = t.BaseType;
				}
			}
			catch
			{
				InvokeServerMethod();
			}
			
		}

		private void RegisterClientScript()
		{
			this.page.RegisterHiddenField(constMethodName, "");
			this.page.RegisterHiddenField(constMethodParams, "");

			string script = @"
				<script language='javascript' type='text/javascript'>
					function CallServerMethodSkipClientValidate(methodName, methodParams)
					{                     
						document.all['constmethodName'].value = methodName;
						document.all['constmethodParams'].value = methodParams;
						document.forms[0].submit();
					}
					function CallServerMethod(methodName, methodParams)
					{
						if (typeof(Page_ClientValidate) != 'undefined')
						{                 
							if (!Page_ClientValidate()) return;
						}
						CallServerMethodSkipClientValidate(methodName,methodParams);
					}
				</script>";

			this.page.RegisterStartupScript("CallServerMethod", script.Replace("constmethodName", constMethodName).Replace("constmethodParams", constMethodParams));

		}

		private void InvokeServerMethod()
		{

			System.Reflection.MethodInfo mi = null;

			try
			{
				int starPos = methodName.IndexOf("*");
				if (starPos != -1)			//find star
				{
					string[] ss = methodName.Split('*');
					Control c = this.page.FindControl(ss[0]);		//ss[0] is UserControl's UniqueID
					if (c == null)
					{
						throw new Exception("Can't find the type: " + ss[0]);
					}
					mi = this.GetMethodByName(c.GetType().BaseType, ss[1]);			//ss[1] is Method Name;
					mi.Invoke(c, new object[] { methodParameters});
				}
				else
				{
					mi = this.GetMethodByName(this.page.GetType().BaseType, methodName);
					mi.Invoke(this.page, new object[] { methodParameters});
				}
			}
			catch (System.Reflection.TargetInvocationException ex)
			{
				if (ex.InnerException != null && ex.InnerException is System.Threading.ThreadAbortException)
				{
					return;
				}
				else
				{
					throw ex;
				}
			}
		}

		private System.Reflection.MethodInfo GetMethodByName(System.Type t, string name)
		{
			return t.GetMethod(name);
		}


		#region IPostBackEventHandler Members

		public void RaisePostBackEvent(string eventArgument)
		{
			this.InvokeServerMethod();
		}

		#endregion
	}
}
 
ServerMethodProxy for ASP.net 2.0
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;

namespace Freeborders.PLM.WebFramework
{
    public class ServerMethodProxy
    {
        private System.Web.UI.Page page;

        private const string constMethodName = "__methodName";
        private const string constMethodParams = "__methodParams";

        public ServerMethodProxy(System.Web.UI.Page page)
        {
            this.page = page;

            this.page.LoadComplete += new EventHandler(OnLoadComplete);

            this.RegisterClientScript();
        }

        void OnLoadComplete(object sender, EventArgs e)
        {
            this.InvokeServerMethod();
        }

        private void RegisterClientScript()
        {
            this.page.ClientScript.RegisterHiddenField(constMethodName, "");
            this.page.ClientScript.RegisterHiddenField(constMethodParams, "");

            string script = @"
				<script language='javascript' type='text/javascript'>
					function CallServerMethodSkipClientValidate(methodName, methodParams)
					{                     
						document.all['constmethodName'].value = methodName;
						document.all['constmethodParams'].value = methodParams;
						document.forms[0].submit();
					}
					function CallServerMethod(methodName, methodParams)
					{
						if (typeof(Page_ClientValidate) != 'undefined')
						{                 
							if (!Page_ClientValidate('')) return;
						}
						CallServerMethodSkipClientValidate(methodName,methodParams);
					}
				</script>";

            this.page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServerMethod", script.Replace("constmethodName", constMethodName).Replace("constmethodParams", constMethodParams));

        }

        private void InvokeServerMethod()
        {

            string methodName = this.page.Request.Form[constMethodName];

            if (string.IsNullOrEmpty(methodName))
            {
                return;
            }

            string methodParameters = this.page.Request.Form[constMethodParams];

            System.Reflection.MethodInfo mi = null;

            try
            {
                int userControlUniqueIDLength = methodName.LastIndexOf(":");
                if (userControlUniqueIDLength != -1)			//find user control unique ID
                {
                    string userControlUniqueID = methodName.Substring(0, userControlUniqueIDLength);
                    string serverMethodName = methodName.Substring(userControlUniqueIDLength + 1);
                    Control c = this.page.FindControl(userControlUniqueID);
                    if (c == null)
                    {
                        throw new Exception("Can't find the type: " + userControlUniqueID);
                    }
                    mi = this.GetMethodByName(c.GetType().BaseType, serverMethodName);
                    mi.Invoke(c, new object[] { methodParameters });
                }
                else
                {
                    mi = this.GetMethodByName(this.page.GetType().BaseType, methodName);
                    mi.Invoke(this.page, new object[] { methodParameters });
                }
            }
            catch (System.Reflection.TargetInvocationException ex)
            {
                if (ex.InnerException is System.Threading.ThreadAbortException)
                {
                    return;
                }
                else
                {
                    throw ex;
                }
            }
        }

        private System.Reflection.MethodInfo GetMethodByName(System.Type t, string name)
        {
            return t.GetMethod(name);
        }
    }
}

计算机英语·P

P P semaphore operation,P信号量操作 PA,physical address,物理地址 packets,包 padding ,blocks,填充块 ...
  • a1456123a
  • a1456123a
  • 2017年05月20日 11:18
  • 290

保护模式--页式存储

1.页,就是一块内存,在80386中,页的大小是固定的4096字节(4KB)。 2.逻辑地址: 1.在有地址变换功能的计算机中,访问指令给出的地址 (操作数) 叫逻辑地址,也叫相对地址。  ...
  • lp19911126
  • lp19911126
  • 2017年01月22日 17:37
  • 122

postgresql 数据文件损坏回复实验

实验一: 创建两个表,有外键约束关系,通过修改二进制其中一段为全f破坏父表数据文件,重启数据库,父表中少了一条记录,子表中记录齐全,可以看出pg在查询、删除子表记录时不检查文件约束,只在更新、增加子...
  • BeiiGang
  • BeiiGang
  • 2012年11月15日 16:24
  • 4753

Single Page Application - 下一代的Web应用程序

from: 在Web Service, Ajax, Web 2.0,REST等Web应用与技术话题热潮,带动许多第二代的Web开发技术成长之后,这些话题也渐渐地消退。不过许多人可能不曾发现,其实...
  • hotdust
  • hotdust
  • 2014年10月13日 17:29
  • 2691

LoadRunner——LoadRunner中 Web Page Diagnostics分析

转自:http://blog.sina.com.cn/s/blog_4bed363d01009qfw.html LR 的性能分析,首先从lr的事务执行情况入手。     网页细分(Web P...
  • wx19900503
  • wx19900503
  • 2016年11月14日 13:13
  • 664

PageBase 公共基础类

PageBase 公共基础类
  • fuyifang
  • fuyifang
  • 2014年10月23日 18:04
  • 1083

兔子--Fragment与ViewPager实现切换与侧滑效果

效果图: 目录结构: 代码分析: MainActivity.java package com.example.myfragment; /** * @author Arthur Lee * ...
  • u013425527
  • u013425527
  • 2014年12月15日 15:07
  • 676

ERROR: invalid page header in block 13760 of relation base/16995/67484

ERROR: invalid page header in block 13760 of relation base/16995/67484 or that, when doing your...
  • killer000777
  • killer000777
  • 2014年07月16日 13:45
  • 1324

FreeMarker的 base 参数问题

最近遇到一个问题,是在SpringMVC+FreeMarker项目的使用了一个base参数,${base}可一直报没有此参数定义异常。在网上查了很多资料,说是可以直接使用。后面才发现这个参数是由Str...
  • tianlong1569
  • tianlong1569
  • 2014年03月27日 22:10
  • 2700

SharePoint关于publish page, WiKi page, Web part page区别

并非所有页面类型都相似 让我们来重新理解一下关于这三种页面的问题,自己找了很多文章并没有找到很好的介绍。 尽可能简单,SharePoint页面是您的用户内容显示的地方。您可以将其比喻成ShareP...
  • zhouyu2584569
  • zhouyu2584569
  • 2017年09月01日 15:37
  • 255
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Base Web Page
举报原因:
原因补充:

(最多只允许输入30个字)