我现在做的是一个会议的模块,总共牵扯到三个表
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");
}
}
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");
}
}
解决方案 »
- 如何做报表?
- 系统打包问题??
- C#调用VC写的图形处理DLL函数,其中有HDIB类型的参数,调用时在C#中应传入什么类型?
- 求一个webmethod判断IP的方法! (结合XML的)
- socket.Receive为什么在收到空字节的时候会kill当前线程
- Entity Frameword分页
- 在.NET中合并EXCEL单元格,为什么会无法执行下去呢?
- dataGrid问题
- Array in Structure when calling functions in dll writtern in c
- 怎么配置C#的开发环境??我装的是win2000 server
- 怎么用C#连接ORACLE数据库
- 有关socket 编码,大侠
用Session吧,这样每个用户都有一个实例,互不影响。
//初始化
Session["Filelist"] = new List<string>();//使用
List<string> Filelist =(List<string>) Session["Filelist"] ;
参考