你是用session保存用户名,再根据用户名去 获取表单List?
感觉不是session,关闭窗口是关闭浏览器了吗? 如果关闭浏览器了,应该session 用户名为空了;如果只是关闭一个选项卡,session 用户名还是原来的,没有变。
具体楼主可以调式一下,就知道问题在哪了。
不是 session保存的是userinfo实体,提交表单需要填写申请人(默认的是session中用户的值)
@kistliu: 不用SESSION 来保存实体,这样你网络中断,或者什么情况,就会造成你说的那些原因,
你提交的时候,用实体做什么呢?
查询的时候才用实体!或者别的,插入的时候 用实体 是不是画蛇添足?
@kistliu:
session保存的是userinfo实体还是用户名都一样,session中的值 有没有变化,
变化了,肯定是其它地方赋值了;只是关闭窗口,不会改变session的
@黑色王子: 提交的时候,整张表单不只是一张表,不用实体难道直接用sql啊,而且这是个老系统,持久层就是用的EF,我能不用么。。。
关键是现在不能重现这个问题啊,只是在客户那偶然出现得这个问题。。。
@kistliu:
不能重现,只能检查一下代码了,查找 CurrentUser属性引用,看看 哪里有赋值的地方,如果没有,那应该是 重新登录过了,导致凭证的Identity.Name发生变化
还有获取 list的方法
数据中断造成的,应该提交的时候用事物来回滚操作!
提交的时候是用的事物来处理的,但是这里的问题是使用session中用户信息赋值的地方会出现莫名其妙的数据,这些数据根本不是我提交前填写的表单数据啊。。。。求助啊
@kistliu: 检查你赋值session的地方! 看看是否哪里写多了?
@黑色王子: 什么叫写多了??不懂哦。。
@kistliu:
public static UserInfo CurrentUser { get { if (HttpContext.Current.Session["userInfo"] == null) { string domainName = HttpContext.Current.User.Identity.Name; int index = domainName.IndexOf(@"\"); if (index > 0) { domainName = domainName.Remove(0, index + 1); } BREmployee emp = new BREmployee(); UserInfo user = emp.GetEmpByDomainName(domainName); if (user.EmpID < 0) { throw new Exception("0004"); } else { HttpContext.Current.Session["userInfo"] = user; } } return (UserInfo)HttpContext.Current.Session["userInfo"]; } set { HttpContext.Current.Session["userInfo"] = value; }
这里就是session值设置的地方。。
@kistliu: 你用lock 试试!~
@黑色王子: lock?怎么用。。。我是菜鸟~~
@kistliu: 在你提交的地方用lock把代码包起来;
lock(this)
{
操作代码
}
今天看到还没结贴,特地回来结贴。问题不在这里。。。。