我只想保存数据库中图像的路径。 所以我试试这个。
我得到此错误System.NullReferenceException:对象引用未设置为对象的实例。
这是我的控制器
public ActionResult SaveImages(IEnumerable<HttpPostedFileBase> img, Imagenes images)
{
foreach (var n in img)
{
var PhotoUrl = Server.MapPath("/images" + n.FileName);
if (n != null && n.ContentLength > 0)
n.SaveAs(PhotoUrl);
images.imgUrl = "/images" + n.FileName;
db.Imagenes.Add(images);
db.SaveChanges();
}
return View("Index");
}
这是我的模特课
public partial class Imagenes
{
public int id { get; set; }
[StringLength(200)]
public string imgUrl { get; set; }
}
我的观点
@{
ViewBag.Title = "Home Page";}
@using (Html.BeginForm("SaveImages", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div>
<input type="file" name="img" id="img" multiple />
<input type="submit" name="submit" value="Save"/>
</div>}
答案 0 :(得分:2)
您获得的错误与图像保存部分无关,但我假设它是使用您的images
属性...
由于您没有指定该属性的来源,MVC会自动假定它是一个POST变量,而在HTML中,您没有任何排序......
将您的操作代码更改为:
public ActionResult SaveImages(IEnumerable<HttpPostedFileBase> img)
{
const string folderToUpload = "/images";
foreach (var n in img)
{
var imageToUpload = folderToUpload + n.FileName;
var photoUrl = Server.MapPath(imageToUpload);
if (n != null && n.ContentLength > 0) {
n.SaveAs(photoUrl); // save to folder
var images = new Imagenes {
imgUrl = imageToUpload
};
db.Imagenes.Add(images); // add to repository
db.SaveChanges(); // save repositorychanges
}
}
return redirectToAction("Index");
}
我还假设db
已经在你的构造函数中注入了,而且它不是NULL
编辑代码:
创建一个变量来保存图像的完整路径,这样就不会一遍又一遍地重复那些代码(记住:DRY - 不要重复自己)
仅在文件保存时保存到数据库
redirectToAction
重定向到该操作,因为您可能在Index
中进行了一些调用,只有重定向到视图才会出现错误PhotoUrl
更改为photoUrl
(局部变量=以小写字母开头)