记录ASP.NET页面表单初始状态(主要是为了前台可以根据这个判断页面是否变动了)
把页面表单状态记录到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页面表单初始状态(主要是为了前台可以根据这个判断页面是否变动了)的更多相关文章
- html前端如何将一个页面表单内的数据全部传递到另一个页面?
http://blog.csdn.net/stone_tomcate/article/details/64148648?winzoom=1
- html 页面表单如果是disabled,则不能提交到服务器端,request.getParameter得到的将为null
html 页面表单如果是disabled,则不能提交到服务器端,request.getParameter得到的将为null 解决方法:使用hidden 利用javascript赋值,传递到后台
- 把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进)
#把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进) ##背景 项目中经常需要把JSON数据填充到页面表单,一开始我使用easyui自带的form load方法,觉得效率很低,经 ...
- SpringMVC接收页面表单参数-java-电脑编程网
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- 使用JQuery.Validate插件来校验页面表单有效性
使用JQuery.Validate插件来校验页面表单有效性1. [代码] 常见的注册表单元素 <form action="#" method="post" ...
- JavaScript学习——使用JS完成注册页面表单校验
1.步骤分析 第一步:确定事件(onsubmit)并为其绑定一个函数 第二步:书写这个函数(获取用户输入的数据<获取数据时需要在指定位置定义一个 id>) 第三步:对用户输入的数据进行判断 ...
- HTML 之 Web页面表单form中只有一个input的text元素,按回车默认提交
WEB开发中,如果页面的 form 中只有一个input元素,在该input元素的输入框中按回车(注:此时并没有写对应的onkeydown等事件处理),则浏览器会默认提交表单,请看如下代码: < ...
- JS实现给页面表单设置触发默认按钮
var defaultBtnId; function setDefaultButton(id) { defaultBtnId = id; } document.onkeydown = function ...
- SpringMVC获取页面表单参数的几种方式
以下几种方式只有在已搭好的SpringMVC环境中,才能执行成功! 首先,写一个登陆页面和一个Bean类 <%@ page language="java" co ...
随机推荐
- mvc 5 的过滤器和webapi 过滤器 对应实现的action过滤器区别
asp.net webapi Action过滤器实现这个: #region 程序集 System.Web.Http, Version=5.2.3.0, Culture=neutral, Publi ...
- asp.net 追加文本(追加写入记事本)
代码: string path = Server.MapPath("/Log/Log.txt"); if (File.Exists(path)) { using (StreamWr ...
- 要将程序集“xxx.dll”标记为系统必备组件,必须对其进行强签名
最近编译经常偶尔出现标题这个错误,有时重启电脑,就正常了,有时重启也不行,真蛋疼,后来发现把dll预先拷贝到生成目录,也可以避免这个编译错误,但是实在是麻烦,再去Google了半天,终于找到了解决方案 ...
- C#设置程序自启动
public static void SetAutoRun(string fileName, bool isAutoRun) { RegistryKey reg = ...
- C#图像处理(1):在图片上加文字和改变文字的方向
C#在图片上加文字,代码如下: /// <summary> /// 图片上方加文字,文字将会被180度反转 /// </summary> /// <param name= ...
- 莫比乌斯反演题目泛做(为了对应smz的课件)
题1:BZOJ2190 SDOI 2010 仪仗队 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2190 算法讨论: 我们先来考虑一个点被 ...
- Android 开发技术流程
1.网络连接通信 HttpClient 类通信(见<第一行代码> 郭霖2014.8月第一版P385) Android Asynchronous Http Client (见 http: ...
- (原)Ubuntu16中安装cuda toolkit
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5655957.html 参考网址: https://devtalk.nvidia.com/default ...
- transient 做个标记
import java.io.*; import java.util.*; public class Logon implements Serializable { /** * */ private ...
- j2ee中request.getQueryString()
比如发送http://localhost/test.do?a=b&c=d&e=f得到的是a=b&c=d&e=f