asp.net-mvc-4 – 在MVC4文件中上传其在DB中保存的“System.Web.
发布时间:2020-12-16 07:40:53 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试使用MVC4进行文件上传,但是在DB中保存对象名称“System.Web.HttpPostedFileWrapper”而不是文件名,即“Songs.MP3”,也不会将文件传输到给定位置. 模型 public class FileUpload{ [Key] public int FileUploadID { get; set; } public int AlbumID
我正在尝试使用MVC4进行文件上传,但是在DB中保存对象名称“System.Web.HttpPostedFileWrapper”而不是文件名,即“Songs.MP3”,也不会将文件传输到给定位置.
模型 public class FileUpload { [Key] public int FileUploadID { get; set; } public int AlbumID { get; set; } public string FileType { get; set; } public string FileUploadLocation { get; set; } public virtual Albums Albums { get; set; } } 视图 @using (Html.BeginForm("Create","FileUpload",FormMethod.Post,new { enctype = "multipart/form-data" })) { <div class="editor-label"> @Html.LabelFor(model => model.FileUploadLocation) </div> <div class="editor-field"> @Html.TextBoxFor(model => model.FileUploadLocation,new { type = "file",accept = "FileUploadLocation/*" }) @Html.ValidationMessageFor(model => model.FileUploadLocation) </div> 调节器 // // POST: /FileUpload/Create [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(FileUpload fileupload,HttpPostedFileBase FileUploadLocation) { if (ModelState.IsValid) { var fileName = Path.GetFileName(FileUploadLocation.FileName); var path = Path.Combine(Server.MapPath("~/Images/Files"),fileName); FileUploadLocation.SaveAs(path); db.FileUploads.Add(fileupload); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.AlbumID = new SelectList(db.Albumss,"AlbumID","AlbumTitle",fileupload.AlbumID); return View(fileupload); } 文件在?/ Images / Files位置不可用. 解决方法
这里几乎没有问题.第一个问题是命名约定.您的FileUpload模型将FileUploadLocation属性作为字符串,并且在控制器的Create方法中,您将传递FileUpload fileupload模型和HttpPostedFileBase FileUploadLocation.
其他更重要的问题是您不应该将View Model保存到数据库,它应该映射到某种域对象,而这些域对象又会被保存.例如: 创建新的视图模型: public class FileUploadViewModel { public int FileUploadID { get; set; } public int AlbumID { get; set; } public string FileType { get; set; } public HttpPostedFileBase FileUploadFile { get; set; } public virtual Albums Albums { get; set; } } 从您的域模型中删除虚拟方法: public class FileUpload { [Key] public int FileUploadID { get; set; } public int AlbumID { get; set; } public string FileType { get; set; } public string FileUploadLocation { get; set; } } 那么你的Controller Create方法应该是这样的: [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(FileUploadViewModel model) { if (ModelState.IsValid) { var fileName = Path.GetFileName(model.FileUploadFile.FileName); var path = Path.Combine(Server.MapPath("~/Images/Files"),fileName); model.FileUploadFile.SaveAs(path); db.FileUploads.Add(new FileUpload { FileUploadID = model.FileUploadID,AlbumID = model.AlbumID,FileType = model.FileType,FileUploadLocation = path }); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.AlbumID = new SelectList(db.Albumss,model.AlbumID); return View(model); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- vs文件上传失败--超过最大字符限制
- asp.net – DropDownList烦恼:相同的值不会触发事件
- asp.net – 如何让Html Link(锚点)回发像LinkBut??ton一样?
- 关于WCF的一个非常“无语”的BUG!
- asp.net-mvc – Customer Feedback替代UserVoice?
- 临时ASP.NET文件丢失
- asp.net – 应用程序之间的Azure AD身份验证
- ASP.NET FormsAuthentication cookie值的内容是什么?
- asp.net – 为什么<%=%>在一种情况下工作,但在另一种情
- asp.net – 在离开Gridview页面后维护GridView当前页面索引
推荐文章
站长推荐
- unit-testing – 单元测试自定义验证过滤器
- 如何在asp.net中向客户端发送“拒绝访问”的http
- asp.net – 访问asp:从代码背后的内容
- .net – 提供“添加到日历”链接
- asp.net-core – Windows和Linux上的dnxcore50有
- asp.net – PostBackUrl没有将Page.IsCrossPageP
- asp.net – NullReferenceException在PipelineSt
- asp.net-mvc – Azure和MVC2 Web角色模板
- 验证 – ASP.Net MVC3电子邮件/电话数据注释不起
- asp.net-mvc – HttpContext.Current.User.IsInR
热点阅读