2011-06-10 54 views
6

我已经有了一个asp.net页面,它具有c#代码隐藏功能,可以在Page_Load()方法中执行一些操作(如查询数据库并进行一些其他调用以使用数据填充对象) 。然后我在页面上显示这些数据。这一切工作正常。我设置了几个回发,以便当单击列表框中的值时,面板控件将填充相应对象的其余数据。我认为回传是正确的做法,但这会导致(整个类)被重新调用,重新初始化我的对象并破坏我想保留的数据。在回传中保留c#对象

某种形式的部分回传会解决这个问题,还是有更好的方法来实现我想要做的事情?

我不想每次回传被调用时重新填充的对象,因为这需要一个数据库查询,我想避免重新查询每被点击一次的东西...

我已经发现了很多关于持久化Javascript对象的问题,但没有任何真正解决这个问题的东西。我正在使用.Net 4.0

+0

你有很多选择来保存你的数据会话/缓存/ Cookie /等...另一种选择可能是部分后[UpdatePanel](http://www.asp.net/ajax/tutorials/understanding -Asp净Ajax的UpdatePanel中的触发器)。 – Zachary 2011-06-10 16:25:52

回答

3

将对象放入当前用户的Session

+0

好吧,仍然在做一个完整的回发考虑正确的方式来做到这一点?或者我应该使用某种Ajax或部分回发来更改页面的某些部分? – uscere90 2011-06-10 16:19:30

+0

你现在正在完全不同的主题。在回发之间为用户保留变量和对象最好由'Session'处理 - 或者InProc使用SQL Server数据库。无论您是想要完成一个回发还是使用AJAX,都取决于您的应用程序的布局。例如,刷新网格或列表可能最好使用AJAX刷新处理,因为您只需抓取数据而不是页面布局元素等。希望有所帮助。 – Yuck 2011-06-10 16:22:11

+0

我不会推荐在会话中放置对象。 – Chris 2011-06-10 16:34:11

2

把你所有的初始化的东西在(!IsPostback) { }并使用部分回发。这样初始化代码在回发期间不会再被调用。

+0

我已经在Page_Load部分中了 - 我遇到的问题是可变范围。我有很多方法用于处理这些对象,所以它们被声明为类作用域变量。当我做完整的回发时,他们会重新申报,旧的会被销毁。 – uscere90 2011-06-10 16:56:03

+2

您可以使用ViewState而不是Session来保存变量。这样他们只能在该页面中生活。 – Marcus 2011-06-10 18:01:05