MVC всегда возвращает мне ноль, когда я пытаюсь добавить изображение - PullRequest
0 голосов
/ 21 мая 2018

Привет, у меня проблема с MVC. Мне нужно сохранить изображение в таблицу в моей базе данных, но при попытке добавить изображение всегда выдается ошибка «ImageFile.get return null».

мой код

моя модель

public partial class Inventario
{
    public int IdProduct { get; set; }
    [DisplayName("Product")]
    public string Name_Product { get; set; }
    public Nullable<decimal> Price{ get; set; }
    public Nullable<int> Stock{ get; set; }
    [DisplayName("Category")]
    public Nullable<int> IdCategory { get; set; }
    [DisplayName("Upload Image")]
    public string ImagePath { get; set; }


    public HttpPostedFileBase ImageFile { get; set; }
}

мой вид

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

<input type="file" name="ImageFile" required>

мой контроллер

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "IdProduct,Name_Product,Price,Stock,IdCategory,ImagePath")] Inventario inventario)
{
    string fileName = Path.GetFileNameWithoutExtension(inventario.ImageFile.FileName);
    string extension = Path.GetExtension(inventario.ImageFile.FileName);
    fileName = fileName + DateTime.Now.ToString("yymmssfff") + extension;
    inventario.ImagePath = "~/Image/" + fileName;
    fileName = Path.Combine(Server.MapPath("~/Image/"), fileName);
    inventario.ImageFile.SaveAs(fileName);

    if (ModelState.IsValid)
    {
        db.Inventarios.Add(inventario);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(inventario);
}

1 Ответ

0 голосов
/ 21 мая 2018

Вы используете атрибут Bind, чтобы явно ограничить свойства, которые связыватель модели будет сопоставлять с опубликованными данными формы.Вы не включили свойство ImageFile и, следовательно, средство связывания модели по умолчанию не сопоставило его с опубликованными данными формы.

Добавьте его в список Bind Include, и оно будет работать.

public ActionResult Create([Bind(Include = "IdProduct,Name_Product, Price,Stock,
                                            IdCategory,ImageFile")] Inventario inventario)
{  
    // to do : Your existing code
}

Более слабое решение - создать модель представления со свойствами, необходимыми для представления, и использовать его.Это лучший способ предотвратить чрезмерную публикацию.Также не рекомендуется использовать классы сущностей из вашего уровня доступа к данным в слое представлений / представлений.Это делает его тесно связанным с этими классами.

...