为什么我在尝试上传图片时遇到NullReferenceException?

时间:2015-11-18 20:09:51

标签: c# asp.net-mvc

我对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,我是否从表单中将文件发送到控制器?

2 个答案:

答案 0 :(得分:2)

您的输入文件ID是&#34; 文件&#34;并且行动结果是期待&#34; pic &#34;

将您的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");
    }

答案 1 :(得分:1)

当您尝试阅读newPix.File属性时,您将获得空引用异常。 newPix null ,您正在尝试读取某些null属性。

null 因为模型绑定失败了!当视图模型属性名称和表单元素名称相同时,就会发生模型绑定。您的表单元素缺少name属性。添加它,它应该工作。

<input type="file" name="File" id="File" />

下次出现错误时,在代码中放置一个visual studio断点并检查变量值,您就会知道它失败的原因。