Element „object” nie zawiera definicji....

0

Witam.

Ucze sie MVC od kilkunastu godzin z tym turorialem

Otrzymuje blad - Additional information: Element „object” nie zawiera definicji „KontaktImie”. Wydaje mi sie, ze probowalem juz wszystkiego. Szukalem tez w necie.

Oto kod.

Model klasy Kontakt.cs

 
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;


namespace pierwszaAplikacja.Models
{
    class Kontakt
    {

       
        public string KontaktImie { get; set; }
        public string KontaktNazwisko { get; set; }
        public string KontaktMiasto { get; set; }
        public string KontaktUlica { get; set; }
    }
}

HomeController.cs

 
using pierwszaAplikacja.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace pierwszaAplikacja.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var kontakty = new List<Kontakt> { new Kontakt { KontaktImie = "Adam", KontaktNazwisko = "Nowak",KontaktMiasto = "Katowice", KontaktUlica ="Adama" },
               new Kontakt { KontaktImie = "Tomek", KontaktNazwisko = "Nowak", KontaktMiasto = "Kraków", KontaktUlica ="Kolista" },
               new Kontakt { KontaktImie = "Jacek", KontaktNazwisko = "Kowal", KontaktMiasto = "Piła", KontaktUlica ="Mila" }};

            //int[]  kontakty= { 1, 2, 3, 4, 5 };

           ViewBag.KontaktyDoPrzekazania=kontakty;

            return View(ViewBag.KontaktyDoPrzekazania);
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }
}

View - Index.cshtml (tutaj tylko fragment kodu. Reszta jest raczej nie istotna

 
<div>
    @{  
        foreach(var kontakt in ViewBag.KontaktyDoPrzekazania)
        {
            <p>
                @kontakt.KontaktImie, @kontakt.KontaktNazwisko, @kontakt.KontaktUlica, @kontakt.KontaktMiasto
            </p>
        }

    }
</div>
0

Może doklej do widoku ten model.


@model pierwszaAplikacja.Models.Kontakt

 
1

On nie potrafi na podstawie ViewBag.KontaktyDoPrzekazania samemu wiedzieć, że jest to lista kontaktów, myśli, że to jest lista obiektów.

Masz dwie możliwości:

  • albo sobie wykonasz rzutowanie w tej pętli wyświetlającej kontakty, żeby zmienna kontakt nie była var, ale była typu Kontakt;
  • albo wyrzucisz w ogóle ViewBag i zastosujesz widok oparty o typowane modele. Tak będzie lepiej.

Dodatkowo: po co w klasie Kontakt nazywasz wszystko z przedrostakiem Kontakt? Wyrzuć go, będzie czytelniej i mniej pisania. Polecam też odinstalować polski pakiet językowy do .NET, aby mieć angielskie komunikaty błędów ;-)

1
pred napisał(a):

Witam.

Ucze sie MVC od kilkunastu godzin z tym turorialem

Otrzymuje blad - Additional information: Element „object” nie zawiera definicji „KontaktImie”. Wydaje mi sie, ze probowalem juz wszystkiego. Szukalem tez w necie.

Oto kod.

Model klasy Kontakt.cs

 
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;


namespace pierwszaAplikacja.Models
{
    class Kontakt
    {

       
        public string KontaktImie { get; set; }
        public string KontaktNazwisko { get; set; }
        public string KontaktMiasto { get; set; }
        public string KontaktUlica { get; set; }
    }
}

HomeController.cs

 
using pierwszaAplikacja.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace pierwszaAplikacja.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var kontakty = new List<Kontakt> { new Kontakt { KontaktImie = "Adam", KontaktNazwisko = "Nowak",KontaktMiasto = "Katowice", KontaktUlica ="Adama" },
               new Kontakt { KontaktImie = "Tomek", KontaktNazwisko = "Nowak", KontaktMiasto = "Kraków", KontaktUlica ="Kolista" },
               new Kontakt { KontaktImie = "Jacek", KontaktNazwisko = "Kowal", KontaktMiasto = "Piła", KontaktUlica ="Mila" }};

            //int[]  kontakty= { 1, 2, 3, 4, 5 };

            return View(kontakty); // lub return View(kotakty.ToList());
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }
}

View - Index.cshtml (tutaj tylko fragment kodu. Reszta jest raczej nie istotna
na początku pliku


@model IEnumerable<pierwszaAplikacja.Models.Kontakt>

<div>
    @{  
        foreach(var kontakt in Model)
        {
            <p>
                @kontakt.KontaktImie, @kontakt.KontaktNazwisko, @kontakt.KontaktUlica, @kontakt.KontaktMiasto
            </p>
        }

    }
</div>

Powinno zadziałać.

Aha ... jeszcze jedno staraj się unikać ViewBag-ów, jeśli masz zdefiniowany model. Choć zapewne, ktoś będzie miał inne zdanie.

0

Glupi bląd zrobilem, a myslalem, ze wszystko sprawdzilaem.
Brakowalo 'public' przy klasie Kontakt.
Twoje rozwiazanie Szymon tez dziala, dzieki wielkie.
Na razie nie znam nic innego, oprocz przekazywania przez ViewBag. Autor kursu tez sugerowal, ze nie jest to najlepsze rozwiazanie, wiec pewnie inne pojawią się w przyszłych odcinkach.
Dziękuję za pomoc.

1

Jak chcesz podejść do sprawy poważnie to kup książkę. W książce masz wiedzę jakoś uporządkowaną.

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