我现在做的是一个会议的模块,总共牵扯到三个表
doc_Medel(会议表) pub_attachment(附件表)ref_docAndAttachment(关系表)在添加会议这个页面,我放一个checkbox,是否添加附件,如果选择添加我就弹出一个层,让用户上传附件(可以上传多个),我的思路现在是这样的,定义一个全局static List,如果用户点击上传文件,我就把上传文件的ID加到list里面然后在用户填写完会议以后,点击保存,我就把会议的ID记录起来,然后就是把会议的ID,和上传文件的ID保存到关系表(用for循环),保存以后我就把list Clear ,这样是达到我的效果了,但是也有问题,这样只局限与一个人,如果同时有两个人或者两个人以上同时上传文件的话,就会出现bug这样就只有一个人有附件而且把别人的也包括进来了,其他的人都没有,所以想请教各位,有什么好的思路。 谢谢private static List<string> Filelist = new List<string>(); //保存上传文件ID/// <summary>
        /// 上传附件
        /// </summary>
        /// <param name="formvalues"></param>
        /// <returns></returns>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult addFile(FormCollection formvalues)
        {
            try
            {
                foreach (string item in Request.Files)
                {
                    HttpPostedFileBase file = Request.Files[item] as HttpPostedFileBase;
                    if (file == null && file.ContentLength == 0)
                        continue;
                    string path = Server.MapPath("~//UploadFile//");//上传的路径
                    if (!System.IO.Directory.Exists(path))         //如果不存在该路径,则创建
                    {
                        System.IO.Directory.CreateDirectory(path);
                    }
                    path = AppDomain.CurrentDomain.BaseDirectory + "UploadFile/";                    string fileName = Path.GetFileName(file.FileName);                   // string tempStr = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();
                    string tempFileName = fileName.Substring(0, fileName.IndexOf('.')) + DateTime.Now.ToString("yyyyMMddHHmmss") + fileName.Substring(fileName.IndexOf('.'), fileName.Length - (fileName.IndexOf('.')));                    file.SaveAs(Path.Combine(path, tempFileName));  //上传文件                    Pub_Attachment att = new Pub_Attachment();
                    att.FileName = fileName;
                    att.FilePath = Path.Combine(path, tempFileName);
                    att.FileContext = "";
                    att.Status = "1";
                    att.Re = "";
                    //att.CreateBy=Session
                    att.CreateDate = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    attService.Insert(att);                    //返回上传文件的ID
                    string tempID = (attService.Select(" and FilePath='" + att.FilePath + "' ")).SingleOrDefault().AttachmentID;
                    Filelist.Add(tempID);                }                return Content("<script>alert('上传文件成功');window.history.back();</script>");
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                return Redirect(Request.ApplicationPath + "error.htm");
            }
        } /// <summary>
        /// 插入功能
        /// </summary>
        /// <param name="formsValues"></param>
        /// <returns></returns>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Doc_Model1_Insert(FormCollection formsValues)
        {
            try
            {
                Doc_Model1 model = new Doc_Model1();
                model.DocName = formsValues["txtDocName"];
                model.Title = formsValues["txtTitle"];
                model.Moderator = formsValues["txtModerator"];
                model.Present = formsValues["txtPresent"];
                model.Address = formsValues["txtAddress"];
                model.StartTime = formsValues["txtStartTime"];
                model.EndTime = formsValues["txtEndTime"];
                model.ContractNo = formsValues["txtContractNo"];
                model.ContractName = formsValues["txtContractName"];
                model.Context = formsValues["txtContext"];
                model.Status = "1";
                model.Re = formsValues["txtRe"];
                string temp = formsValues["check1"];
                if (temp == "on")
                {
                    model.IsAttachment = "1";
                }
                //model.CreateBy=Session
                model.CreateDate = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                model1Service.Insert(model);
                //返回添加会议的ID
                string tempDocID = (model1Service.CreateMeet(" and Title='" + model.Title + "' and CreateDate='" + model.CreateDate + "'")).SingleOrDefault().DocID;
               
                if (temp == "on")//判断是否添加附件
                {
                    Ref_DocAndAttachment model1 = null;
                    for (int i = 0; i < Filelist.Count; i++)
                    {
                        if (Filelist[i] != "" || Filelist[i] != null)
                        {
                            model1 = new Ref_DocAndAttachment();
                            model1.AttachmentID = Filelist[i].ToString();
                            model1.DocID = tempDocID;
                            model1.DocTable = "Doc_Model1";
                            docAndAttService.Insert(model1);
                        }
                    }
                    Filelist.Clear();//清空list
                }                return RedirectToAction("Doc_Model1_List");            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                return Redirect(Request.ApplicationPath + "error.htm");
            }
        }

解决方案 »

  1.   

    我明白了,不要定义static的全局变量,这是所有用户都共享的,会乱套的。
    用Session吧,这样每个用户都有一个实例,互不影响。
      

  2.   


    //初始化
    Session["Filelist"] = new List<string>();//使用
    List<string> Filelist =(List<string>) Session["Filelist"] ;
      

  3.   

    就是说你用static的全局变量话,大家都会一起共用这个变量,导致所有人的附件ID都会加到这个里面来,所以会出现BUG,其实你可以这样,在主界面放个隐藏的空间,当关闭子页面的时候将ID返回到主页面隐藏控件上,点击保存的时候直接读隐藏控件的内容就可以了。
      

  4.   

    补习一下Session的知识吧!

    参考