Avatar billede mjdigital Nybegynder
26. december 2011 - 16:46 Der er 11 kommentarer og
1 løsning

2 modelsi et view problem :) MVC3/C#

Har Blog.cs som ser sådan her ud.

@model IEnumerable<Site.Models.BlogPost>       

@{
        ViewBag.Title = "Blog";
}

<section id="blog">

@foreach (var item in Model) {
        @item.Headline
}     

        @Html.Partial("_BlogSideBarPartial")


Og _BlogSideBarPartial ser sådan her ud

@model Site.Models.BlogCategorie

@{
    ViewBag.Title = "_BlogSidebarPartial";
}


<h2>_BlogSidebarPartial</h2>


Fejl:
The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[Site.Models.BlogPost]', but this dictionary requires a model item of type 'Site.Models.BlogCategorie'.
Avatar billede mjdigital Nybegynder
26. december 2011 - 16:48 #1
Den benytter Parent viewmodel og ikke den der er på Partial, hvordan pokker får jeg lavet en override, eller tilføjet begge Tabeller til 1 model.
Avatar billede madand Nybegynder
27. december 2011 - 11:11 #2
Du skal benytte en ViewModel.

En ViewModel er en class med properties svarende til de objecter du ønsker, at bruge i viewet. :)

public class HomeViewModel {
  public List<User> Users { get; set; }
  public BlogCategory BlogCategory { get; set; }
 
  public HomeViewModel(List<User> users, BlogCategory blogCategory)
  {
    Users = users;
    BlogCategory = blogCategory;
  }
}

I din controller skriver du:
var viewModel = new HomeViewModel (users, blogCategory);
return View(viewModel);

Dit view skal derefter benytte din HomeViewModel.

Så kan du kalde @Model.Users og @Model.BlogCategory
Avatar billede mjdigital Nybegynder
27. december 2011 - 14:47 #3
Hejsa Mads :) Kigger jeg lige på, tak for svaret. Vender lige tilbage imorgen med om det virkede.
BTW længe siden ;) (Morten her Lars's fætter fra bonbon-land)
Avatar billede madand Nybegynder
27. december 2011 - 15:02 #4
Hej Morten :D
Avatar billede mjdigital Nybegynder
27. december 2011 - 16:33 #5
Jamen dav Mads :D Måske du gider tilføje mig på MSN?
Så har jeg dig til efterfølgende spørgsmål :D hehe.

Msn: morten@bormeth.dk
Skype: MrBormeth
Avatar billede mjdigital Nybegynder
28. december 2011 - 23:42 #6
Måske er det bare mig der ikke helt forstår. :)

Men har smidt

      public class HomeViewModel
      {
          public List<BlogPost> Posts { get; set; }
          public BlogCategorie BlogCategory { get; set; }

          public HomeViewModel(List<BlogPost> posts, BlogCategorie blogCategory)
          {
              Posts = posts;
              BlogCategory = blogCategory;
          }
      }

I toppen af mit script og prøver så at kalde dem vha.

var viewModel = new HomeViewModel(context.BlogPosts, context.BlogCategories);

Men syntes ikke at fungere. Er ikke helt sikker på hvordan jeg fylder det BlogPosts objekt op med egentlig posts :D
Avatar billede madand Nybegynder
29. december 2011 - 10:09 #7
bruger du en ORM'er?
Avatar billede mjdigital Nybegynder
29. december 2011 - 10:34 #8
Bruger et Entity layer til at håndtere min database. :)
Avatar billede madand Nybegynder
29. december 2011 - 11:46 #9
Kan du builde med det kode du har skrevet der?

For enten er din navngivning forkert eller os prøver du at give den en liste af Category (categories), selv om den kun tager en enkelt category.
Avatar billede mjdigital Nybegynder
29. december 2011 - 15:21 #10
Jeg får en fin rød fejl der siger "Argument Type 'System.Data.Entity.DBset<Site.Models.BlogPost' is not assignable to parameter type 'Site.Models.BlogPost'"
Avatar billede mjdigital Nybegynder
29. december 2011 - 15:49 #11
Mads det er hermed løst! :) Smid lige et svar.
Avatar billede madand Nybegynder
30. december 2011 - 13:48 #12
Hehe det var godt :) svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester