把页面表单状态记录到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. 在Qt中用QAxObject来操作Excel

        目录(?)[+]   下一篇:用dumpcpp工具生成的excel.h/excel.cpp来操纵Excel 最近写程序中需要将数据输出保存到Excel文件中.翻看<C++ GUI Pro ...

  2. LinkedList的分析(转)

    一.源码解析 1. LinkedList类定义. public class LinkedList<E> extends AbstractSequentialList<E> im ...

  3. 《JavaScript 闯关记》之 BOM

    ECMAScript 是 JavaScript 的核心,但如果要在 Web 中使用 JavaScript,那么 BOM(浏览器对象模型)则无疑才是真正的核心.BOM 提供了很多对象,用于访问浏览器的功 ...

  4. hadoop启动守护进程报JAVA_HOME is not set and could not be found

    hadoop启动守护进程 sbin/start-dfs.sh 报如下错误:JAVA_HOME is not set and could not be found 解决办法(JAVA_HOME修改为具体 ...

  5. 拥有iframe页面的子父类窗口调用JS的方法,并且注意的事项

    一.前言 我页面用的是EasyUI的弹出窗口里面嵌入一个iframe.第一:父窗口打开子窗口是一个新增用户信息的iframe子页面,点击保存后,子窗口iframe则去调用父窗口的function cl ...

  6. Linq的查询操作符

    Linq有表达式语法和调用方法的语法.两者是可以结合使用,通常情况下也都是结合使用.表达式语法看上去比较清晰而调用方法的语法实现的功能更多,在此文章中介绍的是表达式语法.方法语法可以看System.L ...

  7. DOM元素尺寸和位置(clientwidth ,scrollwidth , offsetwidth.......)

    [1] slientWidth 和 sclientHeight slientWidth:获取的是可视宽度 slientHeight:获取的是可视高度 <html> <head> ...

  8. Qt Library 链接库

    官方教程:http://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application http://qimo601.i ...

  9. html5页面增强元素

    figure元素以及figcaption元素 <figure> <img src="images/1.jpg" alt="图片"> &l ...

  10. Hadoop常见异常及其解决方案

    1.Shell$ExitCodeException 现象:运行hadoop job时出现如下异常: 14/07/09 14:42:50 INFO mapreduce.Job: Task Id : at ...