ASP.NET 页面基类设计—防止2次提交和事件统一管理

来源:互联网 发布:网络日语课堂老师招聘 编辑:程序博客网 时间:2024/05/29 18:39

在ASP.NET的应用设计中,有一个好的画面基类很重要,它可以实现如:权限验证,Session管理,共通画面控制==。
现在介绍一下实现 画面 防止2次提交和事件统一管理

1:创建基础页面类

using System;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WeTest.framework.common
{
    
public class BasePage :Page
    
{
        
/// <summary>
        
/// 处理标记ID
        
/// </summary>

        protected const string SyoRiFlg_NM = "SyoRiFlg_234u19798701872348374534543";

        
/// <summary>
        
/// 处理函数
        
/// </summary>
        
/// <param name="pintActCmd">処理コマンド</param>

        protected virtual void Run_Gen_Act_Cmd(int pintActCmd)
        
{
        }


        
/// <summary>
        
/// 画面实行函数(2次提交验证)
        
/// </summary>
        
/// <param name="pintActCmd">処理コマンド</param>

        protected void Gen_Act_Cmd(int pintActCmd)
        
{
            
// 处理中验证
            if (!IsSyoRiFlg)
            
{
                
// 处理标记设置
                SetSyoRiFlg();
                
// 业务处理
                Run_Gen_Act_Cmd(pintActCmd);
                
// 处理标记清空
                ClearSyoRiFlg();
            }

        }


        
/// <summary>
        
/// 处理中标记
        
/// </summary>

        public bool IsSyoRiFlg
        
{
            
get
            
{
                
bool blnSyoRi_Flg = false;
                
if(Session[SyoRiFlg_NM] == null)
                
{
                    Session[SyoRiFlg_NM] 
= blnSyoRi_Flg;
                    
return blnSyoRi_Flg;
                }

                blnSyoRi_Flg 
= (bool)Session[SyoRiFlg_NM];
                
return blnSyoRi_Flg;
            }

        }


        
/// <summary>
        
/// 业务处理中标记设置
        
/// </summary>

        public void SetSyoRiFlg()
        
{
            
bool blnSyoRi_Flg = true;
            Session[SyoRiFlg_NM] 
= blnSyoRi_Flg;
        }


        
/// <summary>
        
/// 业务处理中标记清空
        
/// </summary>

        public void ClearSyoRiFlg()
        
{
            
bool blnSyoRi_Flg = false;
            Session[SyoRiFlg_NM] 
= blnSyoRi_Flg;
        }


    }


}

2:创建画面,继承上面的基类:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

using WeTest.framework.common;

namespace WeTest
{
    
/// <summary>
    
/// testForm1 の概要の説明です。
    
/// </summary>

    public class testForm1 : BasePage
    
{
        
protected System.Web.UI.WebControls.Button testBtn1;
    
        
private const int ACTIVE_SEARCH = 1;

        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
        }


        
override protected void OnInit(EventArgs e)
        
{
            InitializeComponent();
            
base.OnInit(e);
        }


        
private void InitializeComponent()
        
{    
            
this.testBtn1.Click += new System.EventHandler(this.testBtn1_Click);
            
this.Load += new System.EventHandler(this.Page_Load);
        }


        
private void testBtn1_Click(object sender, System.EventArgs e)
        
{
            Gen_Act_Cmd(ACTIVE_SEARCH);
        }

        
        
/// <summary>
        
/// 处理函数 
        
/// </summary>
        
/// <param name="pintActCmd">处理命令</param>

        protected override void Run_Gen_Act_Cmd(int pintActCmd)
        
{
            
try
            
{
                
switch(pintActCmd)
                
{
                    
case ACTIVE_SEARCH:
                    
{
                        
//To Do
                        break;
                    }

                }

            }

            
catch(Exception ex)
            
{
                
//Log
                Response.Write("<Script>window.alert('System Err' + "+ex.ToString()+")</Script>");
            }

        }



    }

}

这样就可以简单的实现了!!!
这里面还需要,共同日志处理,消息处理等!