ASP.NET MVC上传图片
我找到了一些代码来实现这一点并尝试将其实现到我的项目中,但到目前为止它还没有成功。 我没有收到任何错误,但我没有看到任何图像存储在visual studio内的images目录中。
视图:
@using (Html.BeginForm()) { Please enter your story here: }
控制器:
[HttpPost] public ActionResult Create(Testimonials testimonials) { if (Request.Files.Count > 0) { var file = Request.Files[0]; if (file != null && file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(Server.MapPath("~/Images/"), fileName); file.SaveAs(path); } } TestimonialsContext testContext = new TestimonialsContext(); testContext.testimonialContext.Add(testimonials); testContext.SaveChanges(); return RedirectToAction("Index"); }
if块下面的部分工作正常。 这只是将textarea的内容保存到数据库中。 有什么想法吗? 我需要对我的模型进行任何更改吗?
模型:
[Table("Testimonials")] public class Testimonials { public int Id { get; set; } public string Testimonial { get; set; } }
上下文类:
public class TestimonialsContext:DbContext { public DbSet testimonialContext { get; set; } }
您的文件未发布,因为您在表单上没有必要的enctype
属性。 更改要使用的视图
@using (Html.BeginForm("Create", "Testimonials", FormMethod.Post, new { enctype = "multipart/form-data" }))
您现在将获取该文件并将其保存,但与您的Testimonials
对象没有任何关系,因此您无法检索它。 您需要在Testimonials
表中添加其他字段以存储文件属性(如果Testimonials
可以包含多个图像,则需要单独的表)。 我还建议您使用唯一标识符将文件保存到服务器(例如,如果2个用户上传具有相同名称的文件,则可以防止意外覆盖)。 你修改过的模型可能是
public class Testimonials { public int Id { get; set; } public string Testimonial { get; set; } public string ImagePath { get; set; } public string ImageDisplayName { get; set; } }
我还建议为视图使用视图模型,其中包括上述属性以及public HttpPostedFileBase Image { get; set; }
public HttpPostedFileBase Image { get; set; }
因此,您可以强烈绑定到模型并添加validation属性(例如, [FileSize]
属性,假设您不希望允许用户上载2GB文件)。 那么你的控制器方法就是
上述就是C#学习教程:ASP.NET MVC上传图片分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
[HttpPost] public ActionResult Create(TestimonialVM model) { // ModelState.IsValid check omitted Testimonials testimonials = new Testimonials(); // map view model properties to the data model .... if (model.Image != null && model.Image.ContentLength > 0) { string displayName = model.Image.FileName; string fileExtension = Path.GetExtension(displayName); string fileName = string.Format("{0}.{1}", Guid.NewGuid(), fileExtension) string path = Path.Combine(Server.MapPath("~/Images/"), fileName) model.Image.SaveAs(path); // Update data model testimonials.ImagePath = path; testimonials.ImageDisplayName = displayName; } TestimonialsContext testContext = new TestimonialsContext(); testContext.testimonialContext.Add(testimonials); testContext.SaveChanges(); return RedirectToAction("Index"); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1044359.html