asp.net-mvc-3 – MVC关注点分离
所以我开始创建我的MVC 3网络应用程序时,我突然意识到我可能在我的控制器中放置了太多的逻辑,它需要在模型中.这个问题是,在这个特定的实例中,我正在处理一个文件.
SQL数据库表存储文件的路径,文件本身保存在目录中.所以在数据库中,文件路径存储为nvarchar,在模型中,文件是一个字符串,一切都与该点一致.当上传文件的时候出现问题,那时我正在处理System.IO.File. 所以问题是,如果在后端它实际上是一个字符串,你如何在模型中为文件提供System.IO.File逻辑? 我已经完成了Controller的功能版本,并且已经有了一些逻辑,当我意识到我正在对抗系统时,它还要添加更多.我的意思是,为了进行服务器端验证,逻辑需要在模型中,以便输入验证根据适当的MVC规则运行和工作,显然可选地结合使用客户端验证. 目前… 这是我的观点: @model ProDevPortMVC3.Profile @{ ViewBag.Title = "Profile Photo Upload"; } <h2>Photo Upload</h2> <img alt="Profile Image" src="@Html.DisplayFor(model => model.ProfilePhotoPath)" /> <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> @using (Html.BeginForm("UploadPhoto","Profile",FormMethod.Post,new { enctype = "multipart/form-data" })) { @Html.ValidationSummary(true) <br /> <input type="file" name="File1" /> @Html.ValidationMessageFor(model => model.ProfilePhotoPath) <input type="submit" value="Upload" /> } 这是我的控制器(只是相关的操作方法): [HttpPost] public ActionResult UploadPhoto(int id,FormCollection form) { Profile profile = db.Profiles.Find(id); var file = Request.Files[0]; if (file != null && file.ContentLength > 0) { try { string newFile = Path.GetFileName(file.FileName); file.SaveAs(Server.MapPath("/Content/users/" + User.Identity.Name + "/" + newFile)); profile.ProfilePhotoPath = "/Content/users/" + User.Identity.Name + "/" + newFile; UpdateModel(profile); db.SaveChanges(); return RedirectToAction("Index"); } catch { return View(); } } return View(); } 这是我的模型(只是与文件相关的部分): public string ProfilePhotoPath { get; set; } 所以我想,在这些特殊情况下,你们的解决方案是什么? 解决方法
描述
假设我理解你的问题.我已经读了几遍你的问题了. ;)如果我不明白,请评论我的答案,以获得更好的答案(我会更新) 我认为你想要的是……如何为你的特定情况建模验证. 您可以使用ModelState.AddModelError(“Key”,“Message)方法添加模型验证错误.
样品 ModelState.AddModelError("ProfilePhotoName","YourMessage"); 这将影响ModelState.IsValid 所以你可以做任何你想做的事(你的逻辑),并使你的模型无效. 更多信息 > MSDN – ModelStateDictionary.AddModelError Method (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在哪里可以找到一个简单的简单解释MVC?
- asp.net – 实体框架不会显示存储过程
- ASP.NET:web.config在哪里/如何缓存?
- dependency-injection – 从作用域服务工厂获取主机名
- asp.net-mvc – 从ASP.NET MVC中的部分视图中删除逻辑
- asp.net-mvc – 为什么自动忽略ApplicationInsights.config
- asp.net-mvc-3 – ASP.NET MVC 3 Razor查看onclick编码
- asp.net-mvc – 在Asp.net MVC中实现通用功能的位置
- ASP.net:如何测试LINQ查询
- ASP.NET图表控件 – 如何使用空自动绘制图表区域?