使用JAVASCRIPT操作COOKIE保存跨页面选择的数据,原理很简单:使用javascript把选中的数据写入cookie和一个隐藏控件(这样服务器端也可获取到选中的数据了),避免选中的数据在url上传递,带来潜在的危险。
在这个例子里最重要的是JS,如何获取数据和分页与JS实现方法是无关的,当然需要把Chebox控件的值设为要保存的数据。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SaveValueOfMultiPages.aspx.cs" Inherits="test.DEMO.SaveValueOfMultiPages" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>多页面选择值</title>
<script language="JAVASCRIPT" type="text/JavaScript">
var splitCharacter = [{id:1,name:"doll"},{id:2,name:"doll;"},{id:3,name:"doll="},{id:4,name:"#ff0000"}];
var ObjSelectValue ;//获取存放选中值的控件对象
var ObjCheckBox ;//获取CheckBox对象集合
window.onload = function()
{
ObjSelectValue = getObjByID("HdSelectedValues");
ObjCheckBox = getObjByName("ckBox");
CheckIn(getSelectValue());
};
//初始化选中信息
function CheckIn(cookies)
{
for(var i=0;i<ObjCheckBox.length;i++)
{
if(cookies.split(ObjCheckBox[i].value + ",").length > 1)
{
ObjCheckBox[i].checked = true;
}
}
}
//添加或移出选中的值
function AddOrRemoveValues(objCkBox)
{
if(objCkBox.checked)
{
var cookies = document.cookie;
if(cookies.split(splitCharacter[1].name).length == 1)
{
if(cookies.split(splitCharacter[0].name).length > 1)
{
cookies = getSelectValue();
if(cookies.split(",").length > 10) //如果超过10个就不让选择,并提示
{
alert("最多只能对比10个!");
objCkBox.checked = false;
return;
}
if(cookies.split(splitCharacter[3].name).length > 1)
{
cookies = cookieStr.replace(splitCharacter[3].name,"");
}
}
}
ObjSelectValue.value += objCkBox.value + ",";
}
else
{
ObjSelectValue.value = ObjSelectValue.value.replace(objCkBox.value+",","");
}
document.cookie = splitCharacter[2].name+ObjSelectValue.value;
}
//清除选中的值
function clearSelectValue()
{
var cookies = getSelectValue();
for(var i=0;i<ObjCheckBox.length;i++)
{
if(cookies.split(ObjCheckBox[i].value+",").length > 1)
{
ObjCheckBox[i].checked = false;
}
}
document.cookie = splitCharacter[2].name + "null";
ObjSelectValue.value = "";
alert("数据清空完成");
}
//获取选中的值
function getSelectValue ()
{
var ReturnValue = "";
var CookieString = document.cookie.split(splitCharacter[2].name);
if(CookieString.length > 1)
{
var CookieArray = CookieString[1].split(';');
if(CookieArray.length>0)
{
ReturnValue = CookieArray[0];
}
}
else
{
ReturnValue = "";
}
if(ReturnValue.indexOf(",") != -1)
{
ObjSelectValue.value = ReturnValue;
}
return ReturnValue;
}
function getObjByID(objID)
{
return document.getElementById(objID);
}
function getObjByName(objName)
{
return document.getElementsByName(objName);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type="button" value="clear check value" onclick="clearSelectValue();">
<table width="70%" height="36" border="1" cellpadding="0" cellspacing="0">
<tr>
<td width="40px">check</td>
<td width="50%" align="left">ShipName</td>
<td align="left">ShipAddress</td>
</tr>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr>
<td><input onclick="AddOrRemoveValues(this)" value="<%# Eval("OrderID") %>" name="ckBox" type="checkbox" /></td>
<td align="left" width="50%" ><%# Eval("ShipName") %></td>
<td align="left" ><%# Eval("ShipAddress") %></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
<asp:Literal ID="ltPage" runat="server"></asp:Literal>
<input type="hidden" id="HdSelectedValues" />
</form>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>多页面选择值</title>
<script language="JAVASCRIPT" type="text/JavaScript">
var splitCharacter = [{id:1,name:"doll"},{id:2,name:"doll;"},{id:3,name:"doll="},{id:4,name:"#ff0000"}];
var ObjSelectValue ;//获取存放选中值的控件对象
var ObjCheckBox ;//获取CheckBox对象集合
window.onload = function()
{
ObjSelectValue = getObjByID("HdSelectedValues");
ObjCheckBox = getObjByName("ckBox");
CheckIn(getSelectValue());
};
//初始化选中信息
function CheckIn(cookies)
{
for(var i=0;i<ObjCheckBox.length;i++)
{
if(cookies.split(ObjCheckBox[i].value + ",").length > 1)
{
ObjCheckBox[i].checked = true;
}
}
}
//添加或移出选中的值
function AddOrRemoveValues(objCkBox)
{
if(objCkBox.checked)
{
var cookies = document.cookie;
if(cookies.split(splitCharacter[1].name).length == 1)
{
if(cookies.split(splitCharacter[0].name).length > 1)
{
cookies = getSelectValue();
if(cookies.split(",").length > 10) //如果超过10个就不让选择,并提示
{
alert("最多只能对比10个!");
objCkBox.checked = false;
return;
}
if(cookies.split(splitCharacter[3].name).length > 1)
{
cookies = cookieStr.replace(splitCharacter[3].name,"");
}
}
}
ObjSelectValue.value += objCkBox.value + ",";
}
else
{
ObjSelectValue.value = ObjSelectValue.value.replace(objCkBox.value+",","");
}
document.cookie = splitCharacter[2].name+ObjSelectValue.value;
}
//清除选中的值
function clearSelectValue()
{
var cookies = getSelectValue();
for(var i=0;i<ObjCheckBox.length;i++)
{
if(cookies.split(ObjCheckBox[i].value+",").length > 1)
{
ObjCheckBox[i].checked = false;
}
}
document.cookie = splitCharacter[2].name + "null";
ObjSelectValue.value = "";
alert("数据清空完成");
}
//获取选中的值
function getSelectValue ()
{
var ReturnValue = "";
var CookieString = document.cookie.split(splitCharacter[2].name);
if(CookieString.length > 1)
{
var CookieArray = CookieString[1].split(';');
if(CookieArray.length>0)
{
ReturnValue = CookieArray[0];
}
}
else
{
ReturnValue = "";
}
if(ReturnValue.indexOf(",") != -1)
{
ObjSelectValue.value = ReturnValue;
}
return ReturnValue;
}
function getObjByID(objID)
{
return document.getElementById(objID);
}
function getObjByName(objName)
{
return document.getElementsByName(objName);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type="button" value="clear check value" onclick="clearSelectValue();">
<table width="70%" height="36" border="1" cellpadding="0" cellspacing="0">
<tr>
<td width="40px">check</td>
<td width="50%" align="left">ShipName</td>
<td align="left">ShipAddress</td>
</tr>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr>
<td><input onclick="AddOrRemoveValues(this)" value="<%# Eval("OrderID") %>" name="ckBox" type="checkbox" /></td>
<td align="left" width="50%" ><%# Eval("ShipName") %></td>
<td align="left" ><%# Eval("ShipAddress") %></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
<asp:Literal ID="ltPage" runat="server"></asp:Literal>
<input type="hidden" id="HdSelectedValues" />
</form>
</body>
</html>