首页 > 解决方案 > 在实体框架和 ASP.NET MVC 中使用模型和 httppostedfilebase 时出现 NullException

问题描述

这是我的模型

public ActionResult Create(CONTENTTABLE cONTENTTABLE, HttpPostedFileBase contentfile)
{
        if (ModelState.IsValid)
        {
            string path = Server.MapPath("/UserContentFiles/");

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            contentfile.SaveAs(path + Path.GetFileName(contentfile.FileName));
            cONTENTTABLE.CONTENTFILEPATH = path + Path.GetFileName(contentfile.FileName).ToString();

            db.CONTENTTABLEs.Add(cONTENTTABLE);
            db.SaveChanges();

            return RedirectToAction("Index");
        }
}

这是我的看法

@using (Html.BeginForm("Create", "CONTENTTABLEs", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>CONTENTTABLE</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        //another input group

        <div class="form-group">
            <label>FILE</label>
            <input type="file" name="CONTENTFILEPATH" id="CONTENTFILEPATH" class="form-control" />
            @Html.ValidationMessageFor(model => model.CONTENTFILEPATH, "", new { @class = "" })
        </div>

        //another input group

        <input type="submit" value="Create" class="btn btn-default" />
    </div>
}

这是我的模型

public string CONTENTFILEPATH { get; set; }
//public HttpPostedFileBase CONTENTFILEPATH2 { get; set; }

但是在执行上传时,我得到一个错误

用户代码未处理 NullReference

在控制器代码行:

contentfile.SaveAs(path + Path.GetFileName(contentfile.FileName));

看起来contentfile是空的:(

我一直在尝试很多方法,更换模型,所以现在的模型包括 httppostfile 基础,但它仍然不能解决问题。还有另一个。

你能给我一些参考吗?

谢谢

标签: asp.net-mvcentity-framework

解决方案


通过这种方式,您的问题将得到解决

将模型更改为

 public HttpPostedFileBase CONTENTFILEPATH { get; set; }

您将需要导入以下命名空间。

 using System.IO;

在你的控制器中

  [HttpPost]
  public ActionResult Index(HttpPostedFileBase contentfile)
   {
      if (ModelState.IsValid)
    {
        string path = Server.MapPath("~/UserContentFiles/");

        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }

        if (contentfile != null)
       {
         string fileName = Path.GetFileName(contentfile.FileName);
         contentfile.SaveAs(path + fileName);

         CONTENTTABLE cONTENTTABLE=new CONTENTTABLE();
         cONTENTTABLE.CONTENTFILEPATH = path + fileName

        db.CONTENTTABLEs.Add(cONTENTTABLE);
        db.SaveChanges();
      }
        return RedirectToAction("Index");
    }
}

推荐阅读