为什么当我尝试上传图像时会出现NullReferenceException
本文关键字:NullReferenceException 图像 为什么 | 更新日期: 2023-09-27 18:22:43
我是C#的新手,我正在为这个问题而挣扎。
我正试图上传一张图片并将其保存到本地文件夹,但我正在尝试时出现NullReferenceException。
我的控制器
[HttpPost]
public ActionResult Index(Picture pic)
{
Picture newPix = pic;
if (newPix.File.ContentLength > 0)
{
var fileName = Path.GetFileName(pic.File.FileName);
//var fileName = pic.File.FileName;
var path = Path.Combine(Server.MapPath("~/Content/images"), fileName);
pic.File.SaveAs(path);
}
return RedirectToAction("Index");
}
我的观点
<div class="row">
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<table>
<tr>
<td>File:</td>
<td><input type="file" id="File" /></td>
<td><input type="submit" name="submit" value="Upload" /></td>
</tr>
</table>
}
我的型号
{
public HttpPostedFileBase File { get; set; }
}
当我调试时,我可以看到控制器中的pic为NULL,我是否从表单向控制器发送了错误的文件?
您的输入文件id为"file",操作结果为预期的
将HTML更新为
<td><input type="file" id="file" name="file" /></td>
将您的行动方法更新为
public ActionResult Index(HttpPostedFileBase file)
{
Picture newPix = file;
if (newPix.File.ContentLength > 0)
{
var fileName = Path.GetFileName(pic.File.FileName);
//var fileName = pic.File.FileName;
var path = Path.Combine(Server.MapPath("~/Content/images"), fileName);
pic.File.SaveAs(path);
}
return RedirectToAction("Index");
}
当您尝试读取newPix.File
属性时,会得到null引用异常。newPix
是null,并且您正在尝试读取null的某些属性。
它是null,因为模型绑定失败!当视图模型属性名称和表单元素名称相同时,就会发生模型绑定。表单元素缺少name
属性。添加它,它应该会起作用。
<input type="file" name="File" id="File" />
下次当你遇到错误时,在代码中设置一个visualstudio断点,并检查变量值,你就会知道它失败的原因。