当前位置:编程学习 > C#/ASP.NET >>

客户端服务器数据共享的问题,请高高手帮忙解决。

我先说下我的需求:
一个单据编辑页面,分为表头和明细GridView(GridView显示该单据下的产品);点【新增】弹出产品新增页面,选择产品并添加多个材料后返回到单据页面,将得到的数据添加到DataTable并无刷新显示明细到GridView。
我现在的做法:
页面中private static定义DataTable,将DataTable绑定到UpdatePanel中的GridView,选择产品后将得到的数据保存到Session,返回页面后前端通过PageMethods调用后端函数,函数中将Session中的数据再更新到DataTable,再回调前端的代码重新绑定GridView进行刷新,现在功能上能够实现,但是有个重大问题就是:A、B用户同时登陆,A添加产品一后,B添加产品二,A再添加后刷新就有3个。
请大家指教是哪个地方出了问题(我怀疑是private static的问题,但如果不是静态类在WebMethod函数中就无法引用),要怎么解决呢,万分感谢!!! AJAX GridView JS调用后台 --------------------编程问答-------------------- 可以把DataTable放到session中 --------------------编程问答-------------------- static在所有用户实例中共享。你可以使用Session
非要使用static,应该做成字典,为每个用户id保存一个DataTable。 --------------------编程问答-------------------- --------------------编程问答-------------------- 谢谢jshi123
放在Session中效率怎么样呢。另外有没有前台直接调用后台函数的方法,WebMethod中不能操作页面控件。 --------------------编程问答-------------------- jshi123:请教使用static,怎么样做成字典,为每个用户id保存一个DataTable呢? --------------------编程问答-------------------- 再一顶下子! --------------------编程问答-------------------- 放到session和用静态变量差不多。现在的问题是你需要为每个用户维持一份DataTable,这样用户多的话,占用内存就会大,这个避免不了,放在哪里都一样。

访问后台的非静态属性方法:
在UpdatePanel里放一个隐藏的Button,需要回调后台时,触发这个按钮的click事件就可以。例如:

<asp:UpdatePanel >
    <ContentTemplate>
       。。。
      <asp:Button runat="server" ID="btn1" OnClick="CallBackEndMethod" style="display:none" />
    </ContentTemplate>
</asp:UpdatePanel>

protected void CallBackEndMethod(object sender, EventArgs e)
{
     。。。。。。。
}
然后可以用js来触发调用:
getElementById('btn1').click(); --------------------编程问答-------------------- 那请问触发按钮怎么样传参以及根据后台返回结果进行回调呢?谢谢! --------------------编程问答-------------------- jshi123:你好,可以加你QQ向你请教吗,谢谢! --------------------编程问答-------------------- 传递参数的话可以放在一个HiddenField的隐藏域中。
按钮处理程序不返回任何结果,但是它对其它控件的修改都会反映到前台中,比方对textbox重新赋值,重新绑定gridview,更新hiddenfield值等,只要这些控件在UpdatePanel范围内。

可以把这种方式看成是普通的postback回调(虽然它是用ajax技术实现的),它会首先执行Page_Load事件,然后再是button_click事件,从编程角度看跟普通回调没什么两样,只是页面刷新范围限制在UpdatePanel中。

这种方式和直接用ajax回调的最大区别就是它是把ViewState值一起post回来,这样在后台就可以完整还原页面状态,得到xxxPage这个对象,你就可以访问其中的实例成员了。

所以UpdatePanel方式和直接ajax理念上有很大区别。UpdatePanel是重度封装的、重量级相对比较大(需要传递viewstate和执行一系列page生命周期)。而ajax是轻量级的,但是它当然不能访问在page生命周期内生成的任何实例。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,