1

长期阅读,第一次海报!

我正在尝试将 Div 对象添加到数组中,并在稍后调用 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">
4

3 回答 3

0

保存回发之间的值,例如 ClientScript 上的 RegisterHiddenField 方法。

http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.registerhiddenfield.aspx

于 2011-01-25T22:57:58.073 回答
0

没有任何 JavaScript 对象的页内持久性,因此任何时候您重新加载页面(这包括回发),JavaScript 执行和您设置的任何变量值都将被重置。

如果您希望数据在任何页面加载之间保持不变,则必须将数据持久存储在某个地方,例如数据库中。您必须编写服务器端代码才能做到这一点。

如果您只希望数据在回发之间保留,您可以:

  1. 按照@Tor 的建议将数据存储在隐藏字段中
  2. 更改您的页面,使其不执行任何回发(阅读 Ajax,使用 jQuery 或类似内容)
  3. 使用 ASP.NETUpdatePanel进行部分页面回发,这基本上与其他 Ajax 方法相同,只是您可以在服务器端事件处理程序中访问您的表单(这是低效的,但在这种情况下您可能不需要关心),JavaScript 环境将保持不变。
于 2011-01-25T23:09:13.453 回答
0

http://www.thomasfrank.se/sessionvars.html#comment158

我最终使用了这种会话存储方法,它对我需要的东西来说有点过分了,但效果很好。

RegisterHiddenField 和 RegisterClientScriptInclude 要求我在每个 Page_Load 重新声明它们,这导致每次都重置值。而且 Ajax 似乎不喜欢与这个特定项目集成,它是在 .net 2.0 新出现时开始的。整个其他的蠕虫罐头。

I also had to start storing the "obj" variable in the array and not the "div"variable, as the div object was too complex an to pass around like that.

Thanks for the help guys, I'd upvote if my account was privileged enough =)

于 2011-01-26T21:56:40.013 回答