IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: ASP:NET MVC - naplneni ViewModelu z Modelu (ActionResult Index)

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
vajkuba1234
Člen
Avatar
vajkuba1234:17.6.2016 13:18

Ahojte, prosim Vas o pomoc, protoze si uz nevim rady. Delam na webove aplikaci a chci v ni vypsat data, ktera jsou ve vztahu One To Many. Vypis pouze ze OnModelCreating metody v DbContext:

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

            //One-To-Many Information-Category
            modelBuilder.Entity<Category>()
                .HasMany<Information>(i => i.Informations)
                .WithRequired(c => c.Category)
                .HasForeignKey(f => f.IdCategory);

            //Many-To-Many Article-Bunkr
            modelBuilder.Entity<Article>()
                .HasMany(s => s.Sections).WithMany(a => a.Articles)
                .Map(t => t.MapLeftKey("IdArticle")
                        .MapRightKey("IdSection")
                        .ToTable("ArticleSection")
                );
}

Tady jsou modely:

public class Information
    {
        public Information()
        {
            this.IsHidden = false;
        }

        [DatabaseGenerated(DatabaseGeneratedOption.Identity), Key]
        public int IdInformation { get; set; }

        public string TitleInformation { get; set; }
        public string ContentInformation { get; set; }
        public DateTime? DateCreatedInformation { get; set; }
        public DateTime? DateEventInformation { get; set; }
        public bool IsHidden { get; set; }

        //Foreign key
        public int IdCategory { get; set; }
        //Navigation property
        public virtual Category Category { get; set; }
}
        public class Category
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity), Key]
        public int IdCategory { get; set; }

        public string NameCategory { get; set; }

        //Navigation property
        public virtual ICollection<Information> Informations { get; set; }
}

K memu problemu:
Kdyz data necham vypsat prasacky rovnou z modelu, vse funguje, ale jelikoz se chci neco priucit, tak bych rad pouzival ViewModely, avsak nevim jak naplnit ViewModel daty v relaci z modelu, abych je nasledne mohl predat do View. Prozatim (prasacky) to mam takto:

namespace KVHTO.Areas.Admin.Controllers
{
    public class InformationController : Controller
    {
        private KvhtoContext db = new KvhtoContext();

        // GET: Admin/Information
        public ActionResult Index()
        {
            var informations = db.Informations.ToList();

            return View(informations);
        }
    }
}

Mohl by me nekdo, prosim, nasmerovat jak mam ta data spravne namapovat? Nejlepe manualne a pokud by to slo tak i pomoci AutoMapperu? Nejlepe nejak nakopnout? Nejspise jsem mel problem v dotazu Linq. Dekuji moc za tipy :)

Odpovědět
17.6.2016 13:18
No hope, no future, JUST WAR!
Avatar
vajkuba1234
Člen
Avatar
vajkuba1234:21.7.2016 0:57

Uplne jsem na toto zapomnel, ale vyresil jsem to tyz den. :)

public ActionResult Index()
        {
            var informations = db.Informations.Include(i => i.Category);
            List<ListInformationViewModel> list = new List<ListInformationViewModel>();
            foreach(Information i in informations)
            {
                list.Add(new ListInformationViewModel
                {
                    IdInformation = i.IdInformation,
                    TitleInformation = i.TitleInformation,
                    DateCreatedInformation = i.DateCreatedInformation,
                    DateEventInformation = i.DateEventInformation,
                    IsHidden = i.IsHidden,
                    Category = i.Category
                });
            }

            return this.View(list);
        }
Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
21.7.2016 0:57
No hope, no future, JUST WAR!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.