ASP.NET MVC2 项目经验错杂谈

咱们在作项目的时候常常会遇到传附件的问题,一是若是附件不符合格式要求,咱们要清空input file。二是点击附件超连接的时候若是附件不在,应该提示附件不存在。下来咱们就看看怎么实现。先看一个控制器javascript

  
  
  
  
  1. /// <summary> 
  2.        /// 检查文件是否存在 
  3.        /// </summary> 
  4.        /// <param name="id"></param> 
  5.        /// <returns></returns> 
  6.        public JsonResult CheckFileExist(string id) 
  7.        { 
  8.            Appurtenances appurtenances = messageEntities.appurtenances.FirstOrDefault(app => app.serial == id); 
  9.            string fileName = appurtenances.file_name; 
  10.            string filePath = Server.MapPath(appurtenances.file_path); 
  11.            if (!System.IO.File.Exists(filePath)) 
  12.            { 
  13.                strJson = "{suc:0,msg:'文件不存在'}"
  14.            } 
  15.            else 
  16.            { 
  17.                strJson = "{suc:1,msg:'文件存在'}"
  18.            } 
  19.            return Json(strJson, JsonRequestBehavior.AllowGet); 
  20.        } 
  
  
  
  
  1. /// <summary> 
  2.        /// 附件下载 
  3.        /// </summary> 
  4.        /// <param name="id"></param> 
  5.        /// <returns></returns> 
  6.        public ActionResult GetFile(string id) 
  7.        { 
  8.            Appurtenances appurtenances = messageEntities.appurtenances.FirstOrDefault(app => app.serial == id); 
  9.            string fileName = appurtenances.file_name; 
  10.            string filePath = Server.MapPath(appurtenances.file_path); 
  11.            FileStream f = new FileStream(filePath, FileMode.Open); 
  12.            byte[] bytes = new byte[(int)f.Length]; 
  13.            f.Read(bytes, 0, bytes.Length); 
  14.            f.Close(); 
  15.            Response.ContentType = "application/octet-stream"
  16.            Response.AddHeader("Content-Disposition""p_w_upload; filename=" + HttpUtility.UrlEncode(fileName + appurtenances.file_path.Substring(appurtenances.file_path.LastIndexOf(".")), System.Text.Encoding.UTF8)); 
  17.            Response.BinaryWrite(bytes); 
  18.            Response.Flush(); 
  19.            Response.End(); 
  20.            return null
  21.        } 

再看看jsjava

  
  
  
  
  1. function checkFileExist(myId) { 
  2.  
  3.     $.ajax({ 
  4.         url: "/Message/CheckFileExist/" + myId, 
  5.         datatype: "json"// 返回的数据类型 
  6.         type: "post"
  7.         //async:false, 
  8.         success: function (data) { 
  9.             var json = eval("(" + data + ")"); 
  10.             new BaseUtil(json).parsJSONError; 
  11.             if (json.suc == 0) { 
  12.                 jAlert(json.msg, "提示信息"); 
  13.             } else { 
  14.                 $("#downLoadSendMsg" + myId).attr("href""/Message/GetFile/" + myId); 
  15.                 $("#downLoadSendMsg" + myId).removeAttr("onclick"); 
  16.                 if (window.ActiveXObject) {//IE 
  17.                     document.getElementById("downLoadSendMsg" + myId).click(); 
  18.                 } 
  19.             } 
  20.         } 
  21.     }); 
  
  
  
  
  1. function readedMesAddUpdateAppendix(readedMesNum, rowid, readedMesUrl, readAppdName) { 
  2.     var readedMesNum = readedMesNum + 1; 
  3.     var mesupdNewRow = "<tr><td width='430px' height='15px' align='left'>附件" + readedMesNum + ":&nbsp;&nbsp;"
  4.     mesupdNewRow += "<a href='javascript:void(0);' id='downLoadSendMsg" + rowid + "' onclick=checkFileExist('" + rowid + "')>" + readAppdName + "<\/a><\/td><\/tr>"
  5.     jQuery("#readedMesShowAppdTabl").append(mesupdNewRow); 
经过上面的代码咱们能够看到,若是附件存在,则能够被打开或者下载,若是不存在,会提示文件不存在。 那么对于附件不符合条件,咱们如何清空它呢。看看js
  
  
  
  
  1. function deleteFile(file) { 
  2.     var ie = (navigator.appVersion.indexOf("MSIE") != -1); //IE 
  3.     var ff = (navigator.userAgent.indexOf("Firefox") != -1); //Firefox 
  4.  
  5.     if (ie) 
  6.         refreshUploader($("input[name=" + file + "]")[0]); 
  7.     else 
  8.         $("input[name=" + file + "]").attr("value"""); 
  9.  
  10. function refreshUploader(file) { 
  11.     var file2 = file.cloneNode(false); 
  12.     file2.onchange = file.onchange; 
  13.     file.parentNode.replaceChild(file2, file); 

调用的时候仅须要传一个input file的name值便可。ajax

最后来个实惠的,把sql转化为linqsql

  
  
  
  
  1. select sourseware_id,COUNT(*) as num from cours_ewares as a  group by a.sourseware_id having COUNT(*) >1 
  
  
  
  
  1. List<IGrouping<string,EPA_Cours_Ewares>> courseEwaresList = (from ce in examinationPlanArrangementsEntities.cours_ewares 
  2.                                             group ce by ce.sourseware_id into c where c.Count()>1 
  3.                                             select c).ToList(); 

 关于分页,在写分页的时候先获得IQueryable<T>类型,而后再得到其count(),算出总页数和总记录数后,将IQueryable<T>转化为List<T>,由于IQueryable不会向数据库发送sql命令。数据库