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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当我尝试提交表单以存储某些值和上传图像的路径到数据库时,我收到[对象引用未设置...]的错误[复制]相关的知识,希望对你有一定的参考价值。

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

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

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

你调用的对象是空的。

这是我的模特:

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);
答案

发生这种情况是因为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

}

以上是关于当我尝试提交表单以存储某些值和上传图像的路径到数据库时,我收到[对象引用未设置...]的错误[复制]的主要内容,如果未能解决你的问题,请参考以下文章

提交后将 <input type="file"> 传递给其他表单

敏捷上传器 Wordpress 实现

请求参数为空,在提交带有图像的表单数据 AJAX 后

PHP实现简单的文本提交表单(可放入图片)

如何使用上传的图像 url 注入输入字段以及如何将带有表单的 url 提交到 mongodb?

Sails.js 表单帖子未提交任何数据