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

时间:2022-09-04 00:06:31

把页面表单状态记录到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&comma;则不能提交到服务器端,request&period;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&period;Validate插件来校验页面表单有效性

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

  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. fscanf的返回值未成功输入的元素个数 &period;xml

    pre{ line-height:1; color:#38ede1; background-color:#5b2814; font-size:16px;}.sysFunc{color:#008080; ...

  2. SAP校园招聘笔试

    一直就向往着SAP公司,终于,有幸今天参加了SAP校园招聘的笔试.下面我就来简单说说这个笔试的内容. 笔试分为两大部分,一部分是逻辑题,就是些什么阅读分析计算balabala的一堆,是全英文的.另外一 ...

  3. ssh 登录出现的几种错误以及解决办法

    首先.确保server端的ssh服务是开的(service shhd start) 然后在client端输入: ssh usrname@serverip (远程登录) scp filename usr ...

  4. linux中patch命令 -p 选项

    patch命令和diff命令是linux打补丁的成对命令,diff 负责生产xxxxx.patch文件,patch命令负责将补丁打到要修改的源码上.但是patch命令的参数-p很容易使人迷惑,因为对- ...

  5. Qt5 FOR WINCE7&comma; Visual Studio 2008环境的搭建

    Qt5 FOR WINCE7, Visual Studio 2008环境的搭建 Qt5发布时,试过配置Qt5 for wince的环境,原因是暂时不支持WINCE.前几天意外发现官方博客说明已经开始支 ...

  6. linux视频学习7(ssh&comma; linux启动过程分析,加解压缩,java网络编程)

    回顾数据库mysql的备份和恢复: show databases; user spdb1; show tables; 在mysql/bin目录下 执行备份: ./mysqldump -u root - ...

  7. hadoop、Storm该选哪一个

    如果hadoop.Storm还感觉混要,那么此篇文章将帮助你把他们完全区分 可以带着下面问题来阅读本文章: 1.hadoop.Storm各是什么运算 2.Storm为什么被称之为流式计算系统 3.ha ...

  8. BufferedWriter

    package JBJADV003;import java.io.*;public class BufferedWriterTest { public static void main(String[ ...

  9. javaweb聊天室源码免费

    效果:可擴展源碼,免費技術指導,電話13956301647 链接:https://pan.baidu.com/s/1FWV8DNWacGaEpAQEsWsNaw 提取码:b6gf

  10. selenium Python 总结一些工作中可能会经常使用到的API。

    selenium Python 总结一些工作中可能会经常使用到的API. 1.获取当前页面的Url 方法:current_url 实例:driver.current_url 2.获取元素坐标 方法:l ...