当我尝试提交表单以存储某些值和上传图像的路径到数据库时,我收到[对象引用未设置...]的错误[复制]

问题描述 投票:0回答:1

这个问题在这里已有答案:

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

但是当我单击“保存”按钮时,它会生成以下错误:

你调用的对象是空的。

这是我的模特:

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>
}

我必须提到它何时生成错误,它还以RED颜色突出显示我的代码行:

string filename = Path.GetFileNameWithoutExtension(e.ImageFile.FileName);
c# asp.net-mvc ef-code-first
1个回答
0
投票

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

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

要防止发生此错误,请确保将有效参数传递给Save的操作方法,并在对象e为null或对象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

}
© www.soinside.com 2019 - 2024. All rights reserved.