首页 > 解决方案 > 当我尝试提交表单以将一些值和上传图像的路径存储到数据库中时,我收到一个错误,因为 [未设置对象引用 ....]

问题描述

我有一个表单来存储数据库中的事件表中的一些记录以及上传文件的路径。

但是当我点击保存按钮时,它会产生以下错误:

你调用的对象是空的。

这是我的模型:

public class events1
{
    public int Id { get; set; }
    public string title { get; set; }
    public string report { get; set; }
    public string image1 { get; set; }
    public string image2 { get; set; }

    [NotMapped]
    public HttpPostedFileBase ImageFile { get; set; }
}

这是我的控制器

    public ActionResult Index()
    {
        var evt = _context.evt1;
        if (evt==null)
        {
            return Content("No events registered in database");
        }
        return View(evt);
    }



    public ActionResult Add_New()
    {

        return View();
    }

    [HttpPost]
    public ActionResult Save(events1 e)
    {

        string filename = Path.GetFileNameWithoutExtension(e.ImageFile.FileName);
        string extension = Path.GetExtension(e.ImageFile.FileName);
        filename = filename + DateTime.Now.ToString("yymmssfff") + extension;
        e.image1 = "~/Uploaded_Files/" + filename;
        filename = Path.Combine(Server.MapPath("~/Uploaded_Files/"), filename);
        e.ImageFile.SaveAs(filename);



        _context.evt1.Add(e);
        _context.SaveChanges();
        ModelState.Clear();

        return RedirectToAction("Index","Events1");
    }

这是观点:

   @model UploadFile_Button.Models.events1
@{
ViewBag.Title = "Add_New";
Layout = "~/Views/Shared/_Layout.cshtml";
 }

 @using (Html.BeginForm("Save", "Events1"))

 {
<div class="form-group">
    @Html.LabelFor(a => a.title)
    @Html.TextBoxFor(a => a.title, new { @class = "form-control" })
</div>
<div class="form-group">
    @Html.LabelFor(a => a.report)
    @Html.TextBoxFor(a => a.report, new { @class = "form-control" })
</div>
<div class="form-group">
   <input type="file" name="ImageFile"/>
</div>
<div class="form-group">
    @Html.LabelFor(a => a.image2)
    @Html.TextBoxFor(a => a.image2, new { @class = "form-control" })
</div>
<button type="submit" class="btn btn-primary">Save</button>
}

我不得不提一下,当它产生错误时,它还会以红色突出显示我的这行代码:

string filename = Path.GetFileNameWithoutExtension(e.ImageFile.FileName);

标签: c#asp.net-mvcef-code-first

解决方案


发生这种情况是因为您的 Save 操作方法中的某些行引发了异常,即运行时错误。该错误Object reference not set to an instance of an object意味着您的 Save 方法中的某些对象为空,并且您的代码正在尝试调用此空对象的方法。很可能,它是您提到的行中的某个对象。(注意:请记住,永远不能在为 null 的对象上调用方法。)

字符串文件名 = Path.GetFileNameWithoutExtension(e.ImageFile.FileName);

为防止发生此错误,请确保将有效参数传递给 Save 的操作方法,并在对象 e 为 null 或 object ImageFile 为 null 之前检查相同的方法,然后在 Save 方法中运行剩余代码,如下所示。

if(e != null && e.ImageFile != null) {
  //your action code goes here
  string filename = Path.GetFileNameWithoutExtension(e.ImageFile.FileName);
  //other code goes here

}

推荐阅读