Avatar billede Sarsten Nybegynder
21. april 2011 - 21:41 Der er 3 kommentarer og
1 løsning

MVC3 designpattern

Hej eksperter,

Jeg har siddet og leget med MVC3 arkitekturen i C# og synes egentligt på nogen punkter det er meget smart. Jeg kan se at der er kommet en opsætning i form af Razor og så den traditionelle aspx. Jeg kører med aspx og jeg ved ikke rigtigt hvorfor, jeg læste om at Razors performance var langt bedre, men nå nu til sagen.

Jeg har oprettet et view som jeg ikke rigtigt kan få til at gøre som jeg gerne vil. Jeg har lidt problemer med at trække variabler ud af min model fordi der er en nullreferenceexception.

Tanken bag programmet er Datalag -> BusinessLag -> MVC lag

Problematikken ligger i at jeg henter et dataset med 4 informationer i om en nyhed og laver den om til en List

Kode

Model klassen ganske simpel

public class ModelNews
{
       
        public string Headline { get; set; }
        public string Article { get; set; }
        public string User { get; set; }
        public string Date { get; set; }       
}

Min controller

public ActionResult GetNews()
        {
            //Henter fra business
            News getNews = new News();

            DataSet data = getNews.GetNews();

            List<ModelNews> NewsPage = new List<ModelNews>();

            foreach (DataRow dr in data.Tables[0].Rows)
            {
                ModelNews model = new ModelNews() ;
                model.Article = dr[0].ToString();
                model.Date = dr[1].ToString();
                model.Headline = dr[2].ToString();
                model.User = dr[3].ToString();
                NewsPage.Add(model);
            }

            //Mit view
            return View("HomePageNews");
        }

View

<% @Page MasterPageFile="~/Views/Shared/Site.Master" Language="C#" Inherits="ViewPage<IEnumerable<Book.WiseBook.Models.ModelsNews>>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
   

    <table>
    <% foreach (var item in Model) { %>
        <tr>
            <td>
                <%= Html.Encode(item.Article) %>
            </td>
            <td>
                <%= Html.Encode(item.Title) %>
            </td>
    <% } %>

    </table>
   
</asp:Content>

Mit problem er at når jeg looper igennem, looper jeg igennem min model og ikke min controller hvor jeg pakker min data ud tror jeg, hvordan kan man kringle denne?

Jeg refererer jo til ViewPage<IEnumerable<Book.WiseBook.Models.ModelsNews>> så jeg henter en klasse der er tom hvor mine udpakkede data ligger i min controller..
Avatar billede aaberg Nybegynder
21. april 2011 - 22:08 #1
Så vidt jeg kan se, kommer din NewsPage variabel aldrig til viewet. Det sker nemlig ikke ad sig selv, det bliver du nød til at specificere.

Det kan du gøre på 2 måder. Herunder er den ene måde

Du kan skrive følgende i din Controller, før du kalder View() metoden.
ViewData["NewsPage"] = NewsPage;

I dit view, får du data ved at refererer til NewsPage. F.eks:

<% foreach (var item in ViewData["NewsPage"]) { %>
...
<% } %>

Den anden måde er at lave et strongly typed view, og angive NewsPage som parameter til View() metoden.
Avatar billede Sarsten Nybegynder
23. april 2011 - 07:28 #2
Jeg gjorde følgende

<% foreach (var m in ViewData.Model)
  { %>
<tr>
    <td><%= m.Headline %> </td>
</tr>
<tr>
    <td> <%= m.User %> <%= m.Date %>  </td>
</tr>
<tr>
    <td><%= m.Article %></td>
</tr>

<% } %>

Model:

ViewData.Model = NewsPage.ToList();
Avatar billede Sarsten Nybegynder
23. april 2011 - 07:29 #3
Smid et svar for point :)
Avatar billede aaberg Nybegynder
24. april 2011 - 09:37 #4
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