长时间读者,第一次海报!
我正在尝试将Div Objects添加到数组中,并在稍后调用loadViews函数时尝试访问它们。 我的所有警报都以正确的顺序触发,但是数组m_Divs的长度始终为0。 我很难过。
我每次都在Page_Load上重新注册脚本,因为它会抛出一个 “如果我没有尝试调用javascript,则在每个page_load之后出现”错误:预期的对象。
.JS档案。
var m_Divs = new Array();
function switchViews(obj) {
alert("switchViews!");
var div = document.getElementById(obj);
var img = document.getElementById('img' + obj);
if (div.style.display == "none") {
alert("adding div" + div);
window.m_Divs.push(div);
alert("added");
}
else {}
}
function loadViews() {
alert(window.m_Divs.length);
for (i = 0; i < window.m_Divs.length; i++) {
window.m_Divs[i].style.display="";
}
}
通过
触发切换视图<a href="javascript:switchViews('div<%#Eval("ID")%>');">
在GridView中。
.CS文件
protected void Page_Load(object sender, EventArgs e)
{
Page.ClientScript.RegisterClientScriptInclude("TheScript", "Scripts/TheScript.js");
if (!Page.IsPostBack)
{
// Stuff.
}
}
相关 .aspx文件代码
<script type="text/javascript" src="Merge.js"></script>
<body onload = "loadViews()">
<form id="form1" runat="server">
答案 0 :(得分:0)
在回发之间保存值,例如在ClientScript上使用RegisterHiddenField方法。
http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.registerhiddenfield.aspx
答案 1 :(得分:0)
任何JavaScript对象都没有页内持久性,因此每次重新加载页面(包括回发)时,JavaScript执行和您设置的任何变量值都将被重置。
如果您希望数据在任何页面加载之间保持不变,则必须将数据存储在持久性的某个位置,就像在数据库中一样。您必须编写服务器端代码才能执行此操作。
如果您只想在回发之间保留数据,您可以:
UpdatePanel
进行部分页面回发,这与其他Ajax方法基本相同,除了您能够在服务器端事件处理程序中访问您的表单(这是低效的,但是也许在这种情况下你不关心),JavaScript环境将保持不变。答案 2 :(得分:0)
http://www.thomasfrank.se/sessionvars.html#comment158
我最终使用了这种会话存储方法,这对我所需要的东西来说太过分了, 但结果很好。
RegisterHiddenField和RegisterClientScriptInclude要求我每次重新声明它们Page_Load,这导致每次重置值。并且Ajax似乎不喜欢与这个特定项目集成,它是在.net 2.0是新的时候开始的。整个其他蠕虫病毒。
我还必须开始在数组中存储“obj”变量,而不是“div”变量,因为div对象太复杂而不能像那样传递。
感谢帮助人员,如果我的帐户有足够的特权,我会投票赞成=)