Dlaczego przekaznie pliku daje null

Odpowiedz Nowy wątek
2019-07-11 19:44
0

Cześć Uczę się dodawać obrazki do stron i mam taki problem wiecie czemu File daje null ?

@model Sklep.ViewModels.EditProductViewModel
    <div class="form-group">
        @Html.LabelFor(m => m.Product.ImagePath, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            <input type="file" name="File"  id="File"/>
        </div>
    </div>
       [HttpGet]
        [Authorize(Roles = "User,Admin")]
        public ActionResult AddProduct()
        {
            var categories = db.Categories.ToList();
            var product = new Product();

            EditProductViewModel vm = new EditProductViewModel()
            {
                Product = product,
                Categories = categories
            };

            return View(vm);
        }

        [HttpPost]
        [Authorize(Roles = "Admin,User")]
        public ActionResult AddProduct(EditProductViewModel vm)
        {

            if (ModelState.IsValid)
            {

                if (vm.File != null)
                {
                    vm.File.SaveAs(HttpContext.Server.MapPath("~/Images/")
                                                          + vm.File.FileName);
                    vm.Product.ImagePath = vm.File.FileName;
                }

                Product product = vm.Product;
                var userId = User.Identity.GetUserId();
                product.UserName = UserManager.Users.FirstOrDefault(x => x.Id == userId).UserName;
                db.Products.Add(product);
                db.SaveChanges();
                TempData["message"] = string.Format("Dodano {0}", product.Name);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                var categories = db.Categories.ToList();
                vm.Categories = categories;
                return View(vm);
            }
    public class EditProductViewModel
    {
        public Product Product { get; set; }
        public IEnumerable<Category> Categories { get; set; }
        public IEnumerable<SelectListItem> CategoryItems
        {
            get
            {
                var allItems = Categories.Select(f => new SelectListItem
                {
                    Value = f.CategoryId.ToString(),
                    Text = f.Name
                });

                return allItems;
            }
        }
        public HttpPostedFileBase File { get; set; }
    }
}

Pozostało 580 znaków

2019-07-11 19:55
1

W ModelState jak dobrze pamiętam możesz podglądnąć błędy dot.bindowania.

Pozostało 580 znaków

2019-07-11 19:58
0

Kurcze a jak to w tym przypadku naprawić ? i o co chodzi dlaczego jest taki błąd ?

edytowany 1x, ostatnio: Michał Warmuz, 2019-07-11 19:58

Pozostało 580 znaków

2019-07-11 20:24
2

Powinieneś pokazać, jak wygląda Twój formularz. Prawdopodobnie nie dodałeś atrybutu enctype o wartości multipart/form-data w elemencie form.

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

Pozostało 580 znaków

2019-07-11 20:29
0

Mam taki kod właśnie

@using (Html.BeginForm("AddProduct", "Products", FormMethod.Post, new { @class = "form-horizontal", role = "form", enctype = "multipart/form-data" }))
{
edytowany 1x, ostatnio: Michał Warmuz, 2019-07-11 20:32

Pozostało 580 znaków

2019-07-11 20:31
1
Michał Warmuz napisał(a):

Mam taki kod:

@using (Html.BeginForm("AddProduct", "Products", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{

Więc zmień czwarty argument na new { @class = "form-horizontal", role = "form", enctype = "multipart/form-data" } i powinno działać. Kodowanie multipart/form-data używa się, gdy formularz przesyła pliki metodą POST.

Pozostało 580 znaków

2019-07-11 20:38
0

Właśnie mam taki kod i też nie działa

@using (Html.BeginForm("AddProduct", "Products", FormMethod.Post, new { @class = "form-horizontal", role = "form", enctype = "multipart/form-data" }))
{

Pozostało 580 znaków

2019-07-11 20:44
0
WeiXiao napisał(a):

Po co sprawdzić w ModelState gdy można zgadywać? :P


if (ModelState.IsValid)

własnie if daje mi true

Pozostało 580 znaków

2019-07-11 20:44
1

Jakoś nie jestem fanem tych html helperów

public class Test
{
    public IFormFile File { get; set; }
}

public IActionResult Test(Test data)
{
    return View();
}

<form method="post" asp-action="Test" enctype="multipart/form-data">
    <input type="file" name="File" />
    <button type="submit"></button>
</form>
edytowany 1x, ostatnio: WeiXiao, 2019-07-11 20:44

Pozostało 580 znaków

2019-07-11 20:58
1

Kurcze sprawdziłem i kiedy miałem name="@Model.File" to taki kod się wygenerował <input type="file" id="file" />
a gdy dodałem sam name="File" to jest dobrze dziękuje :)

Pozostało 580 znaków

2019-07-12 21:07

Twoje programowanie wydaje się być bardzo chaotyczne. Polecam trochę zwolnić i zastanowić się, dlaczego to, co piszesz, działa tak, jak działa. Poprawne formatowanie kodu też jest bardzo ważne, pomaga utrzymać porządek w kodzie, ułatwia innym zrozumienie Twojego kodu i wpływa na ocenę Twojego kodu przez innych programistów.

edytowany 2x, ostatnio: Burmistrz, 2019-07-12 21:15

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0