c# - 当我尝试提交表单以将一些值和上传图像的路径存储到数据库中时,我收到一个错误,因为 [未设置对象引用 ....]
问题描述
我有一个表单来存储数据库中的事件表中的一些记录以及上传文件的路径。
但是当我点击保存按钮时,它会产生以下错误:
你调用的对象是空的。
这是我的模型:
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);
解决方案
发生这种情况是因为您的 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
}
推荐阅读
- printing - 在 Oracle SQLDeveloper 中打印列名
- java - 连接超时:没有更多信息。验证连接属性公式
- javascript - Angular ng-content:如何使用父数据作为子输入
- ubuntu - golang snap安装:cgo.a:只读文件系统
- android - Gradle Sync 在新项目上失败意外的 ZLIB 输入流
- r - n 在 grep, R 中注册为标点符号
- r - Web 将 tableauViz 抓取到 R 数据帧中
- angular - 发送特殊字符到后端
- wpf - 基于 DLL(模块)的 WPF 菜单(菜单项)
- python - 如何返回 python 日期时间格式字符串?