在 ASP.NET MVC 3 中应用 KindEditor
2016-01-21 20:54
651 查看
http://www.cnblogs.com/weicong/archive/2012/03/31/2427608.html
第一步
将 KindEditor 的源文件添加到项目中,建议放到 /Scripts/kindeditor 目录中,其中只需要有 lang目录、plugis目录、themes目录和kindeditor-min.js文件即可。第二步
在 /Views/Shared/EditorTemplates 目录中添加一个分部视图“kindeditor.cshtml”(文件名可任意)。代码如下:第三步
在需要应用编辑器的Model属性中设置 DataAnnotations,比如:第四步
在视图中使用 @Html.EditorFor(model => model.Content) 即可加载编辑器。附 KindEditorHandlerController 源码
1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System.Globalization; 5 using System.IO; 6 using System.Text.RegularExpressions; 7 using System.Web.Mvc; 8 9 namespace KwDoctorCourse.Controllers 10 { 11 public class KindEditorHandlerController : Controller 12 { 13 //文件保存目录路径 14 const string SavePath = "/uploadfile/"; 15 16 #region uploadJson 17 18 // 19 // GET: /KindEditorHandler/Upload 20 21 public ActionResult Upload() 22 { 23 ////文件保存目录路径 24 //const string savePath = "/Content/Uploads/"; 25 26 //文件保存目录URL 27 var saveUrl = SavePath; 28 29 //定义允许上传的文件扩展名 30 var extTable = new Hashtable 31 { 32 {"image", "gif,jpg,jpeg,png,bmp"}, 33 {"flash", "swf,flv"}, 34 {"media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb"}, 35 {"file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2"} 36 }; 37 38 //最大文件大小 39 const int maxSize = 2000000; 40 41 var imgFile = Request.Files["imgFile"]; 42 43 if (imgFile == null) 44 { 45 return ShowError("请选择文件。"); 46 } 47 48 var dirPath = Server.MapPath(SavePath); 49 if (!Directory.Exists(dirPath)) 50 { 51 //return ShowError("上传目录不存在。" + dirPath); 52 Directory.CreateDirectory(dirPath); 53 } 54 55 var dirName = Request.QueryString["dir"]; 56 if (String.IsNullOrEmpty(dirName)) 57 { 58 dirName = "image"; 59 } 60 61 if (!extTable.ContainsKey(dirName)) 62 { 63 return ShowError("目录名不正确。"); 64 } 65 66 var fileName = imgFile.FileName; 67 var extension = Path.GetExtension(fileName); 68 if (extension == null) 69 { 70 return ShowError("extension == null"); 71 } 72 73 var fileExt = extension.ToLower(); 74 75 if (imgFile.InputStream == null || imgFile.InputStream.Length > maxSize) 76 { 77 return ShowError("上传文件大小超过限制。"); 78 } 79 80 if (String.IsNullOrEmpty(fileExt) || 81 Array.IndexOf(((String)extTable[dirName]).Split(','), fileExt.Substring(1).ToLower()) == -1) 82 { 83 return ShowError("上传文件扩展名是不允许的扩展名。\n只允许" + ((String)extTable[dirName]) + "格式。"); 84 } 85 86 //创建文件夹 87 dirPath += dirName + "/"; 88 saveUrl += dirName + "/"; 89 if (!Directory.Exists(dirPath)) 90 { 91 Directory.CreateDirectory(dirPath); 92 } 93 var ymd = DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo); 94 dirPath += ymd + "/"; 95 saveUrl += ymd + "/"; 96 if (!Directory.Exists(dirPath)) 97 { 98 Directory.CreateDirectory(dirPath); 99 } 100 101 var newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt; 102 var filePath = dirPath + newFileName; 103 104 imgFile.SaveAs(filePath); 105 106 var fileUrl = saveUrl + newFileName; 107 108 var hash = new Hashtable(); 109 hash["error"] = 0; 110 hash["url"] = fileUrl; 111 112 return Json(hash, "text/html;charset=UTF-8"); 113 } 114 115 private JsonResult ShowError(string message) 116 { 117 var hash = new Hashtable(); 118 hash["error"] = 1; 119 hash["message"] = message; 120 121 return Json(hash, "text/html;charset=UTF-8"); 122 } 123 124 #endregion 125 126 #region fileManagerJson 127 128 // 129 // GET: /KindEditorHandler/FileManager 130 131 public ActionResult FileManager() 132 { 133 ////根目录路径,相对路径 134 //String rootPath = "/Content/Uploads/"; 135 136 //根目录URL,可以指定绝对路径,比如 http://www.yoursite.com/attached/ 137 var rootUrl = SavePath; 138 139 //图片扩展名 140 const string fileTypes = "gif,jpg,jpeg,png,bmp"; 141 142 String currentPath; 143 String currentUrl; 144 String currentDirPath ; 145 String moveupDirPath ; 146 147 var dirPath = Server.MapPath(SavePath); 148 var dirName = Request.QueryString["dir"]; 149 if (!String.IsNullOrEmpty(dirName)) 150 { 151 if (Array.IndexOf("image,flash,media,file".Split(','), dirName) == -1) 152 { 153 return Content("Invalid Directory name."); 154 } 155 dirPath += dirName + "/"; 156 rootUrl += dirName + "/"; 157 if (!Directory.Exists(dirPath)) 158 { 159 Directory.CreateDirectory(dirPath); 160 } 161 } 162 163 //根据path参数,设置各路径和URL 164 var path = Request.QueryString["path"]; 165 path = String.IsNullOrEmpty(path) ? "" : path; 166 if (path == "") 167 { 168 currentPath = dirPath; 169 currentUrl = rootUrl; 170 currentDirPath = ""; 171 moveupDirPath = ""; 172 } 173 else 174 { 175 currentPath = dirPath + path; 176 currentUrl = rootUrl + path; 177 currentDirPath = path; 178 moveupDirPath = Regex.Replace(currentDirPath, @"(.*?)[^\/]+\/$", "$1"); 179 } 180 181 //排序形式,name or size or type 182 String order = Request.QueryString["order"]; 183 order = String.IsNullOrEmpty(order) ? "" : order.ToLower(); 184 185 //不允许使用..移动到上一级目录 186 if (Regex.IsMatch(path, @"\.\.")) 187 { 188 return Content("Access is not allowed."); 189 } 190 191 //最后一个字符不是/ 192 if (path != "" && !path.EndsWith("/")) 193 { 194 return Content("Parameter is not valid."); 195 } 196 //目录不存在或不是目录 197 if (!Directory.Exists(currentPath)) 198 { 199 return Content("Directory does not exist."); 200 } 201 202 //遍历目录取得文件信息 203 string[] dirList = Directory.GetDirectories(currentPath); 204 string[] fileList = Directory.GetFiles(currentPath); 205 206 switch (order) 207 { 208 case "size": 209 Array.Sort(dirList, new NameSorter()); 210 Array.Sort(fileList, new SizeSorter()); 211 break; 212 case "type": 213 Array.Sort(dirList, new NameSorter()); 214 Array.Sort(fileList, new TypeSorter()); 215 break; 216 default: 217 Array.Sort(dirList, new NameSorter()); 218 Array.Sort(fileList, new NameSorter()); 219 break; 220 } 221 222 var result = new Hashtable(); 223 result["moveup_dir_path"] = moveupDirPath; 224 result["current_dir_path"] = currentDirPath; 225 result["current_url"] = currentUrl; 226 result["total_count"] = dirList.Length + fileList.Length; 227 var dirFileList = new List<Hashtable>(); 228 result["file_list"] = dirFileList; 229 foreach (var t in dirList) 230 { 231 var dir = new DirectoryInfo(t); 232 var hash = new Hashtable(); 233 hash["is_dir"] = true; 234 hash["has_file"] = (dir.GetFileSystemInfos().Length > 0); 235 hash["filesize"] = 0; 236 hash["is_photo"] = false; 237 hash["filetype"] = ""; 238 hash["filename"] = dir.Name; 239 hash["datetime"] = dir.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss"); 240 dirFileList.Add(hash); 241 } 242 foreach (var t in fileList) 243 { 244 var file = new FileInfo(t); 245 var hash = new Hashtable(); 246 hash["is_dir"] = false; 247 hash["has_file"] = false; 248 hash["filesize"] = file.Length; 249 hash["is_photo"] = (Array.IndexOf(fileTypes.Split(','), file.Extension.Substring(1).ToLower()) >= 0); 250 hash["filetype"] = file.Extension.Substring(1); 251 hash["filename"] = file.Name; 252 hash["datetime"] = file.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss"); 253 dirFileList.Add(hash); 254 } 255 256 return Json(result, "text/html;charset=UTF-8", JsonRequestBehavior.AllowGet); 257 } 258 259 260 private class NameSorter : IComparer 261 { 262 public int Compare(object x, object y) 263 { 264 if (x == null && y == null) 265 { 266 return 0; 267 } 268 if (x == null) 269 { 270 return -1; 271 } 272 if (y == null) 273 { 274 return 1; 275 } 276 var xInfo = new FileInfo(x.ToString()); 277 var yInfo = new FileInfo(y.ToString()); 278 279 return String.CompareOrdinal(xInfo.FullName, yInfo.FullName); 280 } 281 } 282 283 private class SizeSorter : IComparer 284 { 285 public int Compare(object x, object y) 286 { 287 if (x == null && y == null) 288 { 289 return 0; 290 } 291 if (x == null) 292 { 293 return -1; 294 } 295 if (y == null) 296 { 297 return 1; 298 } 299 var xInfo = new FileInfo(x.ToString()); 300 var yInfo = new FileInfo(y.ToString()); 301 302 return xInfo.Length.CompareTo(yInfo.Length); 303 } 304 } 305 306 private class TypeSorter : IComparer 307 { 308 public int Compare(object x, object y) 309 { 310 if (x == null && y == null) 311 { 312 return 0; 313 } 314 if (x == null) 315 { 316 return -1; 317 } 318 if (y == null) 319 { 320 return 1; 321 } 322 var xInfo = new FileInfo(x.ToString()); 323 var yInfo = new FileInfo(y.ToString()); 324 325 return String.CompareOrdinal(xInfo.Extension, yInfo.Extension); 326 } 327 } 328 329 #endregion 330 } 331 }
相关文章推荐
- AspNet MVC4 教学-22:Asp.Net MVC4 Partial View 技术高速应用Demo
- 搭建了一个多项目、插件化的ASP.net MVC开发框架
- 搭建了一个多项目、插件化的ASP.net MVC开发框架
- 第一个 Asp.Net vNext 应用程序
- .NET初学者推荐课程 asp.net错误代码大全
- ASP网站项目编译
- asp.net无法触发asp控件的后台方法
- ASP.NET 5基础之中间件
- ASP.NET Web API中把分页信息放Header中返回给前端
- Jexus 网站服务器和 ASP.NET 跨平台开发
- ASP.NET 5 改名 ASP.NET Core 1.0
- 一点一点学ASP.NET之基础概念——委托
- asp.net缓存
- 改善 ASP.NET MVC 代码库的 5 点建议
- 改善 ASP.NET MVC 代码库的 5 点建议
- ASP.NET IIS System.UnauthorizedAccessException: 对路径“C:\......xls”的访问被拒绝。
- ajax+asp.net无刷新验证用户名
- 理解以太坊 Serenity - 第二部分: Casper
- asp中文乱码
- aspose.cells示例及文档