NullException при использовании модели и httppostedfilebase в Entity Framework и ASP. NET MVC - PullRequest
0 голосов
/ 11 января 2020

Вот моя модель

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 является empty: (

Я пробовал много способов, за исключением изменения модели, поэтому модель теперь включает в себя базу httppostfile, но она все еще не решает проблему. Также еще один.

Можете ли вы дай мне ссылку, может быть?

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Таким образом, ваша проблема будет исправлена ​​

Изменена модель как

 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");
    }
}
0 голосов
/ 11 января 2020

измените свой метод на этот

public ActionResult Create(CONTENTTABLE cONTENTTABLE, HttpPostedFileBase CONTENTFILEPATH)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...