Base Web Page

来源:互联网 发布:淘宝店铺导航设置透明 编辑:程序博客网 时间:2024/06/05 09:32
/*Author: Clarion LiDate: Oct.22, 2004  (My nephew is two months old)Purpose:check user loginclient 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 Parametermethod 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 UniqueIDif (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 Memberspublic 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);        }    }}
原创粉丝点击