【问题标题】:javascript viewstate problemjavascript 视图状态问题
【发布时间】:2010-07-13 11:12:10
【问题描述】:

我遇到了一个问题,希望有人能提供帮助。我正在构建一个 .NET/C# Web 应用程序,其中有一个选项卡式面板布局,当用户单击每个选项卡时,显示面板会使用 javascript 更新以隐藏和显示一些 div。这些点击都不会导致回发,都是客户端,所以我不能使用视图状态或会话。

我想要做的是以某种方式记住刷新页面时哪个面板最后可见,但没有发回服务器我不确定如何执行此操作。我尝试了一个隐藏字段,但显然它的值每次都会重置,因为表单从未提交过。我确实知道我可以使用 cookie 来实现这一点,但是对于这样一个(看似)微不足道的操作来实现它有点烦人......但也许这是唯一的方法?

有没有人有更优雅的解决这个问题的方法?

使用这样的函数来显示和隐藏标签):

function makeCurrent(tab) {

if (tab.title == 'Manage orders') {        
    document.getElementById('panelOrders').style.display = "block";
    // Hide others
    document.getElementById('panelAccounts').style.display = "none";
    document.getElementById('panelProducts').style.display = "none";
    document.getElementById('panelSettings').style.display = "none";

    // Remember last viewed panel
    document.getElementById('hdnCurrentlyViewing').value = "orders";
}

面板只是带有 style.display 控制其可见性的 div。不确定发布 HTML 代码是否有用,因为它相当不言自明......?

【问题讨论】:

  • 没有 ajax,希望避免这种情况,但显然我不能......
  • 如果您只能假设最新的浏览器,那么您可以使用 HTML5 网络存储 API 在浏览器上保存会话信息。

标签: c# .net javascript


【解决方案1】:

您可以在没有回发的情况下实现这一点,即从 Javascript 进行 AJAX 调用,在该调用中,您在切换时告诉服务器当前面板是什么。

我更喜欢使用像 JQuery 或 Prototype 这样的框架来帮助自己进行这些 AJAX 调用。

【讨论】:

  • 除了这个功能之外,我对像 jQuery 这样的库没有太多用处,所以我宁愿选择更轻量级的东西。我猜我得写一些 AJAX 函数了?
  • 是的,那么您必须推出自己的 ajax 函数。但是 IMO 如果你在 JS 中进行隐藏 div 和 UI 操作等效果,JQuery 是一种很好的方法,它可以自动处理很多基于浏览器的烦恼。
【解决方案2】:

我认为隐藏字段将是最好的选择。你试过 ASP:HiddenField 吗?它可以通过回发访问。

但是,如果您对回发和隐藏字段仍有保留,您也可以使用来自 JS http://techpatterns.com/downloads/javascript_cookies.php 的 cookie,这是在 JS 中操作 cookie 的辅助库。

问候。

【讨论】:

  • 是的,我尝试了一个隐藏的字段服务器控件,但是这里没有回发(显示使用 javascript 更新客户端),所以这不起作用。隐藏字段的值永远不会提交给服务器。我认为其他人在这里为我确认的是正确的 - AJAX 是唯一可行的方法。
  • cookie 方法是一种有趣的方法......添加和删除 cookie 真的很简单,所以也许这比 AJAX 更容易?但是,cookie 方法不适用于禁用 cookie 的人...
  • 是的,cookie 实现起来很简单,但是如果有人不支持 cookie,那将是一个问题..
猜你喜欢
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多