Dodanie produktu do bazy błąd

1

Cześć dlaczego gdy chce dodać coś do bazy nie moge bo zmienna product ma wartość null
PanelController:

        [HttpGet]
        public ActionResult AddProduct()
        {
            PanelViewModel vm = new PanelViewModel()
            {
                Categories = _db.Categories.ToList()
            };

            return View(vm);
        }
        [HttpPost]
        public async Task<ActionResult> AddProduct(Product product)
        {
            

           _db.Products.Add(product);
           await _db.SaveChangesAsync();

            return RedirectToAction("Index", "Home");
        }

AddProduct.cshtml

@model Sklep.Models.Product


@{
    ViewBag.Title = "AddProduct";
}

<h2>Dodanie produktu</h2>

@using (Html.BeginForm("AddProduct", "Panel"))
{
    <p>Nazwa produktu: @Html.TextBoxFor(x=>x.Name)</p>
    <p>Opis produktu: @Html.TextAreaFor(x => x.Description)</p>
    <p>Cena: @Html.TextBoxFor(x => x.Price)</p>
    <p>
        Kategoria:
        @Html.DropDownListFor(m => m.CategoryID, Model.CategoryItem)
    </p>
    <input type="submit" value="Dodaj" />
}
1

A jak dodasz [FromBody]?

public async Task<ActionResult> AddProduct([FromBody]Product product)
{
... 
} 
0

Kurcze wgl tego FromBody mi nie znajduje musze

0
  1. jak wyglada request na POST?
  2. Zapewne brakuje Ci FromBody. Nie napisales w jakiej technologii piszesz, oczywiscie dla FromBody musisz dodac odpowiedni Using (ctrl + . powinno Ci podpowiedizec w vs)
0

Kurcze właśnie nic nie podpowiada i piszę w ASP.NET

0
using System.Web.Http;
0

Błąd CS0234 Typ lub przestrzeń nazw „Http” nie występuje w przestrzeni nazw „System.Web” (czy nie brakuje odwołania do zestawu?)
Kurcze taki mi wywala błąd

0

pokaz jakie masz referencje w projekcie (prawym na projekt, nie solucje i nacisnij Edit NAZWA.csproj)

0

Kurcze zainstalowałem Microsoft.AspNet.WebApi i juz działał using ale teraz ma cos takiego kurcze "Product dotyczącej typu kontrolera PanelController jest niejednoznaczne między następującymi metodami akcji:
System.Web.Mvc.ActionResult AddProduct() dla typu Sklep.Controllers.PanelController
System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] AddProduct(Sklep.Models.Product) dla typu Sklep.Controllers.PanelController"

oraz jak zainstalowałem to atrybuty http post i get sie "popsuły"

1

W metodzie AddProduct z atrybutem [HttpGet] przekazujesz model typu PanelViewModel, a w metodzie AddProduct z atrybutem [HttpPost] oczekujesz na przesłanie modelu typu Product. Typ modelu w obu metodach i w widoku powinien być taki sam.

Dziwię się, że ładuje się widok, bo powinien pokazać się błąd:

The model item passed into the dictionary is of type 'PanelViewModel', but this dictionary requires a model item of type 'Product'.

Ale to nie jest przyczyną Twojego problemu z bindowaniem modelu. Jesteś pewny, że obiekt product ma wartość null? Jak brzmi treść błędu w wyjątku? Twierdzisz, że nie możesz dodać obiektu do bazy, więc może któraś właściwość obiektu product ma wartość null, a kolumna jest zdefiniowana jako NOT NULL lub tabela odpowiadająca klasie Product ma klucz podstawowy, który w bazie nie jest automatycznie generowany.

Jeśli używasz ASP.NET MVC, to nie dodawaj atrybutu [FromBody], a do atrybutów w kontrolerze używaj przestrzeni nazw System.Web.Mvc.

2

Kurcze wiesz co bo w modelu Product miałem ustwaione na protected set gdy zmieniłem na set to wszystko działa

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