一个通用的Confirmation Page类

原创 2004年09月21日 05:51:00

Confirmation Page

 

1.      Introduction<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

In New or Edit page, users might press the Close button by mistake and lost the content that they have input. To avoid this mistaken action, application should prompt users before the page is closed. This page will not be closed unless users confirm that.

 

This document gives the implementation details for how the Confirmation Page works. It can be used in:

           New Page

           Edit Page

           Any other pages need confirmation before close

 

2.      Solution

2.1 ConfirmationPage Class

ConfirmationPage class is available in the root of XXXWeb project. This is a class derived from PageBase.

This class implements the function of “cause the user to confirm navigating away from the current page”.

 

using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.UI;


namespace Proloq.ProloqWeb
{
 /// <summary>
 /// Will cause the user to confirm navigating away from the current page. This behavior can be overriden.
 /// </summary>
 public class ConfirmationPage : Proloq.ProloqWeb.PageBase
 {
  public ConfirmationPage()
  {
  }

  private bool _IsInEdit = false;
  public bool IsInEdit
  {
   get {return this._IsInEdit;}
   set {this._IsInEdit = value;}
  }

  private string _message = "You will lose any non-saved text";
  public string Message
  {
   get{return _message;}
   set{_message = value;}
  }

  protected override void OnPreRender(EventArgs e)
  {
   //If we are in edit mode, register the script
   if(IsInEdit)
   {
    Page.RegisterClientScriptBlock("ConfirmationBeforeLeaving",string.Format("{0}{1}{2}",scriptStart,Message,scriptEnd));
   }
   base.OnPreRender (e);
  }

 

  const string scriptStart = "<script language=/"javascript/">g_blnCheckUnload = true;function RunOnBeforeUnload() {if (g_blnCheckUnload) {window.event.returnValue = '";
  const string scriptEnd = "';    }  }  function bypassCheck() {     g_blnCheckUnload  = false;   }</script>";

  public static readonly string ByPassFuncationName = "bypassCheck()";


  protected override void Render(HtmlTextWriter writer)
  {

   //If we are in edit mode, wire up the onbeforeunload event
   if(IsInEdit)
   {
    TextWriter tempWriter = new StringWriter();
    base.Render(new HtmlTextWriter(tempWriter));
    writer.Write(Regex.Replace(tempWriter.ToString(),"<body","<body onbeforeunload=/"RunOnBeforeUnload()/"",RegexOptions.IgnoreCase));
   }
   else
   {
    base.Render(writer);
   }
  }
 }
}
 

 

2.2 Implement in Codeback

2.2.1 Inheritance

The pages going to use ConfirmationPage should derived from ConfirmationPage class. Take Product Edit page for example:

public class product_edit : ConfirmationPage

 

 

2.2.2 In CodeBehind

Put a private function like bellow in CodeBehind:

private void SetConfirmation()

{

    ConfirmationPage confirmPage = (ConfirmationPage)this.Page;

    confirmPage.IsInEdit = true;

    confirmPage.Message = "You will lose any unsaved content";

 

    this.SaveButton.Attributes.Add("OnClick",ConfirmationPage.ByPassFuncationName);

}

 

 

 

 

 

 

 

 

 

 

 

SaveButton is the button which you do not want to issue the confirmation. Add other buttons you want here.

 

And in PageLoad, you should use this SetConfirmation() function:

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

{

   

    SetConfirmation();

   

}

 

 

 

 

 

 

2.2.3 In .aspx file

If there are some buttons are not run at server, you should put following code for them. Take Cancel button in Product Edit page for example:

<IMG style="CURSOR: hand" onclick="javascript:bypassCheck();GoBack();" src="<%=Image1URLBase%>/btn_cancel_g.gif" border="0">

 

 

 

 

bypassCheck() function is to clear the confirmation for the page.

通用分页工具类

通用分页工具类最近自己写了一套分页类,和大家分享下,请多多支持。分页详细介绍,首先在即设置每页要显示的条数。通过前台传参获取当前页显示的页数计算出上一页、下一页,第一页,最后一页,页面要显示可选择的页...
  • u010797575
  • u010797575
  • 2016年01月27日 17:16
  • 6504

java分页类Page

package com.h3c.itac.util; import java.util.ArrayList; import java.util.List; @SuppressWarnings("r...
  • qq931399960
  • qq931399960
  • 2015年04月24日 16:47
  • 4593

【ThinkPHP学习】Page分页类学习

RT. 续上面的文章读取功能实现,
  • killzero
  • killzero
  • 2014年08月07日 17:21
  • 1413

给一份Webservice接口通用实现!!

文章来源:http://www.cnblogs.com/MartinChen999/archive/2012/11/18/2775861.html 看到许多中小项目的webservi...
  • buster2014
  • buster2014
  • 2015年05月17日 23:04
  • 1812

Effective Java:对于所有对象都通用的方法

读这本书第1条规则的时候就感觉到这是一本很好的书,可以把我们的Java功底提升一个档次,我还是比较推荐的。这里我主要就关于覆盖equals、hashCode和toString方法来做一个笔记总结,希望...
  • u013761665
  • u013761665
  • 2015年07月14日 23:49
  • 2830

SQLite通用数据库类

using System; using System.Collections; using System.Collections.Specialized; using System.Data; usi...
  • CLeopard
  • CLeopard
  • 2014年10月28日 22:31
  • 1139

面向对象的方式来实现分页的功能——分页类PageBean

面向对象的方式来实现分页的功能——分页类PageBean1.面向对象的方式来实现分页的功能——分页类PageBean,先实现一个工具类代码如下:package cn.itcast.shop.utils...
  • fordushao
  • fordushao
  • 2016年11月01日 22:12
  • 2017

Java中对于所有对象都通用的方法之——equals

Object:所有类的超类Object类是Java中所有类的超类,在Java中每个类都是由它扩展来的。尽管Object是一个具体的类,但是设计它主要是为了扩展。它所有的非final方法(equals、...
  • Shingle_
  • Shingle_
  • 2016年06月30日 22:42
  • 1339

数据分页模块系列 (二) 完美封装PageModel实现分页模块

先说一下框架分页技术,在我们之前那个高校项目中使用DWZ实现的分页用了自定义标签使用起来也比较方便,除了DWZ很多框架已经给我们做好了分页我们需要做的仅仅是把一些分页参数传给我们的框架,俗话说你用别人...
  • lilongsheng1125
  • lilongsheng1125
  • 2014年04月28日 11:54
  • 5219

Mybatis分页助手和通用Mapper的使用

1、Mybatis分页助手的简介      1.1 Mybatis分页助手简介            1.2 详细介绍 https://www.oschina.net/p/mybatis_pageh...
  • zbw18297786698
  • zbw18297786698
  • 2016年12月30日 19:54
  • 5812
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个通用的Confirmation Page类
举报原因:
原因补充:

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