ASP.NET MVC 2プロジェクト経験錯談


私たちはプロジェクトをするときによく添付ファイルを渡す問題に遭遇します.1つは、添付ファイルがフォーマットの要求に合わない場合、input fileを空にします.二つ目は、添付ファイルのハイパーリンクをクリックするときに添付ファイルが存在しない場合は、添付ファイルが存在しないことを示すべきです.次に、どのように実現するかを見てみましょう.まずコントローラを見てみましょう

  
  
  
  
  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""attachment; 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.        } 

jsを見てみろ

  
  
  
  
  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値を1つだけ渡すだけです.
最後にお得にsqlをlinqに変換します

  
  
  
  
  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タイプを取得してからそのcount()を取得し、合計ページ数と合計レコード数を算出した後、IQueryableをListに変換する.IQueryableはsqlコマンドをデータベースに送信しないからである.