2010-07-13 91 views
0

我有一种情况,我坚持,并希望有人可以提供帮助。我正在构建一个.NET/C#web应用程序,在该应用程序中我有一个选项卡式面板布局,当用户单击每个选项卡时,显示面板使用javascript更新以隐藏和显示一些div。这些点击都不会导致回发,它都是客户端,所以我不能使用viewstate或session。javascript viewstate问题

我想要做的是以某种方式记住当页面刷新时哪个面板是最后一个可见的,但没有回发到服务器我不确定如何做到这一点。我尝试过隐藏字段,但显然每次都会重置其值,因为表单从未提交过。我知道我可以使用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代码,因为它相当自我解释...?

+0

你在做阿贾克斯吗? – 2010-07-13 11:19:32

+0

没有ajax,希望避免,但显然我不能... – Ryan 2010-07-13 11:21:21

+0

如果你只能假设最新的浏览器,那么就有HTML5网络存储API,因此你可以在浏览器上保存会话信息。 – Yellowfog 2010-07-13 11:37:18

回答

0

如果没有回传就可以做到这一点,就是使用Javascript进行AJAX调用,您可以在切换时告诉服务器当前面板是什么。

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

+0

除了这个功能,我没有更多的使用像jQuery这样的库,所以我宁愿选择更轻量级的东西。猜猜我必须写一些AJAX函数呢? – Ryan 2010-07-13 11:22:26

+0

是的,那么你将不得不推出自己的ajax功能。但是,如果您正在使用隐藏div和在JS中进行一些UI操作的效果,那么JQuery是一种很好的方法,它可以自动处理大量基于浏览器的烦恼。 – 2010-07-13 12:06:54

0

我觉得隐藏字段将是最好的选择。你有没有试过ASP:HiddenField?它可以通过回传进行访问。

但是,如果您仍然对回发和hiddenfield有一些保留,您也可以使用JS http://techpatterns.com/downloads/javascript_cookies.php的cookie,这是用于JS内cookie操作的辅助库。

问候。

+0

是的我已经尝试了一个隐藏的字段服务器控件,但没有回发发生在这里(显示更新客户端与JavaScript),所以这是行不通的。隐藏字段的值永远不会提交给服务器。我认为别人在这里确认了我的看法 - AJAX是唯一可行的方法。 – Ryan 2010-07-13 11:37:01

+0

饼干方法是一个有趣的...它真的很容易添加和删除饼干,所以也许这会比AJAX更容易?然而,饼干方法不适用于禁用饼干的人... – Ryan 2010-07-13 11:38:31

+0

是的饼干很容易实现,但如果有人不支持饼干,这将是一个问题.. – 2010-07-13 11:57:06