Dodanie produktu do bazy błąd

Odpowiedz Nowy wątek
2019-06-20 09:00

Rejestracja: 1 rok temu

Ostatnio: 11 godzin temu

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" />
}

Pozostało 580 znaków

2019-06-20 09:24

Rejestracja: 4 lata temu

Ostatnio: 3 miesiące temu

1

A jak dodasz [FromBody]?

public async Task<ActionResult> AddProduct([FromBody]Product product)
{
... 
} 
edytowany 1x, ostatnio: nerdxg, 2019-06-20 09:25

Pozostało 580 znaków

2019-06-20 11:11

Rejestracja: 1 rok temu

Ostatnio: 11 godzin temu

0

Kurcze wgl tego FromBody mi nie znajduje musze

Pozostało 580 znaków

2019-06-20 11:16

Rejestracja: 9 lat temu

Ostatnio: 3 dni temu

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)

Pozostało 580 znaków

2019-06-20 11:17

Rejestracja: 1 rok temu

Ostatnio: 11 godzin temu

0

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

Pozostało 580 znaków

2019-06-20 11:18

Rejestracja: 9 lat temu

Ostatnio: 3 dni temu

0
using System.Web.Http;

Pozostało 580 znaków

2019-06-20 11:28

Rejestracja: 1 rok temu

Ostatnio: 11 godzin temu

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

Pozostało 580 znaków

2019-06-20 11:33

Rejestracja: 9 lat temu

Ostatnio: 3 dni temu

0

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

edytowany 1x, ostatnio: fasadin, 2019-06-20 11:33

Pozostało 580 znaków

2019-06-20 11:50

Rejestracja: 1 rok temu

Ostatnio: 11 godzin temu

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"

Ustaw sobie język w VS na angielski, to łatwiej będzie Ci odnajdywać rozwiązania. - WeiXiao 2019-06-20 12:33

Pozostało 580 znaków

2019-06-20 12:35

Rejestracja: 5 lat temu

Ostatnio: 1 dzień temu

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.

edytowany 4x, ostatnio: Burmistrz, 2019-06-20 12:58

Pozostało 580 znaków

2019-06-20 14:36

Rejestracja: 1 rok temu

Ostatnio: 11 godzin temu

2

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

Pozostało 580 znaków

Odpowiedz

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