把页面表单状态记录到HiddenField中.

这里只提供后台代码, 前台逻辑根据需求自由定义.

存放值的ViewState:

protected Dictionary<string, string> HiddenFieldForOriginal
{
get
{
var data = ViewState["HiddenFieldForOriginal"];
if (data == null)
{
Dictionary<string, string> ndata = new Dictionary<string, string>();
ViewState["HiddenFieldForOriginal"] = ndata;
}
return (Dictionary<string, string>)ViewState["HiddenFieldForOriginal"];
}
}

记录表单原始值:

        protected void SaveOriginalData(Control control, bool childVisible)
{
if (control != null)
{
if (control.HasControls()) //有子控件, 往下遍历.
{
foreach (Control item in control.Controls)
{
if (control.Parent.Visible)
{
SaveOriginalData(item, control.Visible);
}
else
{
////这里逻辑是: 父控件是隐藏的, 子控件也就不记录了.
SaveOriginalData(item, control.Parent.Visible);
}
}
}
else
{
string name = control.GetType().Name; string id = control.ClientID + "HiddenField";
if (name == "TextBox" || name == "DropDownList" || name == "CheckBox" || name == "RadioButton")
{
if (childVisible)
{
if (!HiddenFieldForOriginal.Keys.Contains(id))
{
switch (name)
{
case "TextBox": HiddenFieldForOriginal.Add(id, ((TextBox)control).Text); break;
case "DropDownList": HiddenFieldForOriginal.Add(id, ((DropDownList)control).SelectedValue); break;
case "CheckBox": HiddenFieldForOriginal.Add(id, ((CheckBox)control).Checked ? "" : ""); break;
case "RadioButton": HiddenFieldForOriginal.Add(id, ((RadioButton)control).Checked ? "" : ""); break;
default: break;
}
}
}
else
{ if (HiddenFieldForOriginal.Keys.Contains(id))
HiddenFieldForOriginal.Remove(id);
}
}
}
}
}

以下代码可以放在渲染前事件里面:

Panel defaultPanel = defaultUpdatePanel.FindControl("DefaultPanel") as Panel;
if (defaultPanel != null)
{
SaveOriginalData(defaultPanel, defaultPanel.Visible);
foreach (var c in HiddenFieldForOriginal)
{
if (!string.IsNullOrEmpty(c.Key))
{
HiddenField hiddenField = null;
try
{
hiddenField = new HiddenField(); hiddenField.ID = c.Key;
hiddenField.ClientIDMode = System.Web.UI.ClientIDMode.Static;
hiddenField.ViewStateMode = System.Web.UI.ViewStateMode.Disabled;
hiddenField.Value = c.Value; defaultPanel.Controls.Add(hiddenField);
}
finally
{
if (hiddenField != null)
hiddenField.Dispose();
}
}
}
}

记录ASP.NET页面表单初始状态(主要是为了前台可以根据这个判断页面是否变动了)的更多相关文章

  1. html前端如何将一个页面表单内的数据全部传递到另一个页面?

    http://blog.csdn.net/stone_tomcate/article/details/64148648?winzoom=1

  2. html 页面表单如果是disabled,则不能提交到服务器端,request.getParameter得到的将为null

    html 页面表单如果是disabled,则不能提交到服务器端,request.getParameter得到的将为null 解决方法:使用hidden 利用javascript赋值,传递到后台

  3. 把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进)

    #把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进) ##背景 项目中经常需要把JSON数据填充到页面表单,一开始我使用easyui自带的form load方法,觉得效率很低,经 ...

  4. SpringMVC接收页面表单参数-java-电脑编程网

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  5. 使用JQuery.Validate插件来校验页面表单有效性

    使用JQuery.Validate插件来校验页面表单有效性​1. [代码] 常见的注册表单元素 <form action="#" method="post" ...

  6. JavaScript学习——使用JS完成注册页面表单校验

    1.步骤分析 第一步:确定事件(onsubmit)并为其绑定一个函数 第二步:书写这个函数(获取用户输入的数据<获取数据时需要在指定位置定义一个 id>) 第三步:对用户输入的数据进行判断 ...

  7. HTML 之 Web页面表单form中只有一个input的text元素,按回车默认提交

    WEB开发中,如果页面的 form 中只有一个input元素,在该input元素的输入框中按回车(注:此时并没有写对应的onkeydown等事件处理),则浏览器会默认提交表单,请看如下代码: < ...

  8. JS实现给页面表单设置触发默认按钮

    var defaultBtnId; function setDefaultButton(id) { defaultBtnId = id; } document.onkeydown = function ...

  9. SpringMVC获取页面表单参数的几种方式

      以下几种方式只有在已搭好的SpringMVC环境中,才能执行成功!      首先,写一个登陆页面和一个Bean类 <%@ page language="java" co ...

随机推荐

  1. JQuery 之事件中的 ----- hover 与 onmouseover 、onmouseout 联系

    hover([over,]out) 一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法.这是一个自定义的方法,它为频繁使用的任务提供了一种“保持在其中”的状态. 当鼠标移动到一个匹配的元素 ...

  2. Xcode 中添加 .pch文件

    1  新建工程 2  创建  .pch文件 3   在setting里面进行设置:

  3. Android 开发技术流程

    1.网络连接通信 HttpClient 类通信(见<第一行代码> 郭霖2014.8月第一版P385) Android Asynchronous Http Client  (见  http: ...

  4. jxl读和取Excel文件

    请参看下面链接: jxl如何读和取excle中的数据

  5. HTML5简单入门系列(九)

    前言 上篇本来应该就是最后一篇了,但是楼主总觉得没有写上一个简单应用,不算是完整的学习系列.所以增加一篇关于动画的应用,对一个开源动画的介绍(很基础,非楼主原创). 本篇介绍一个基于Canvas的发光 ...

  6. DOM和jQuery

    一.DOM 在学习DOM之前你应该已经具备了以下三个知识点的应用:HTML CSS javascript DOM 是 W3C(万维网联盟)的标准. W3C DOM 标准被分为 3 个不同的部分: 核心 ...

  7. C语言基本概念

    1. 标准C语言 C语言诞生于20世纪70年代,年龄比我们自己还要大,期间产生了很多标准,但是各种编译器对标准的支持不尽相同. ANSI C是使用的最广泛的一个标准,也是第一个正式标准,被称为“标准C ...

  8. Bone Collector(ZeroOnebag)

    Bone Collector Problem Description Many years ago , in Teddy’s hometown there was a man who was call ...

  9. MyEclipse6.5安装SVN插件的三种方法

    MyEclipse6.5安装SVN插件的三种方法 方法一.如果可以上网可在线安装 1. 打开Myeclipse,在菜单栏中选择Help→Software Updates→Find and Instal ...

  10. linux环境下deb格式文件转换成rpm格式

    以 alien_8.87.tar.gz 为例: 下载.安装 alien_8.87.tar.gz [root@shyn ~]# wget http://ftp.de.debian.org/debian/ ...