Variable dele i ASP.NET MVC

Tags:    asp.net mv

Hejsa

Skal til at lave en side, hvor der på første side er en image slider, men ikke på de resterende.
På de resterende skal der så være en stor info-boks-line hvor der står en beskrivelse af menu-punktet.
Udover det skal der være en sidemenu nogle steder.

Jeg har altid arbejdet med en fast struktur, som var ens på alle sider, og der er layout-siden jo dejlig nem netop fordi den er ligesom en masterpage.

Hvad gør jeg så nu? Hvad skal jeg se nærmere på? how to do this?



6 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 16 karma
Sorter efter stemmer Sorter efter dato
Du skal kigge på sections.

I _Layout.cshtml:
Fold kodeboks ind/udHTML kode 

required er default true.

I dine views:
Fold kodeboks ind/udHTML kode 


Hvis du vil definerer noget default indhold, som skal vises hvis sektionen ikke bliver defineret kan du lave:
Fold kodeboks ind/udHTML kode 


Det skulle løse dit problem langt hen ad vejen. En anden måde er at lave en ordentlig switch eller if-sætninger i din _Layout.cshtml, men det er ikke "pænt og ordentligt".

Du kan evt. overveje en blanding (eller partial views afhængig af route), men så skal du have styr på hvornår sektionerne er til rådighed, da det så vidt jeg husker giver en runtime error, hvis du laver en @section { } til en der ikke eksisterer.

Sektioner er også gode, til at putte sine view-specifikke style- og scriptbundles i :)



Indlæg senest redigeret d. 03.07.2014 15:07 af Bruger #16372
Hvis de altid er defineret, så vil det ikke ske nej. Det var, hvis du gav dig til at blande det med en masse if ift. din route i _Layout.cshtml. Jeg vil anbefale altid at have dem defineret.

Ja, lige præcis.

Du kan bruge ViewBag. Et godt eksempel er <title></title> i standard templaten (i hvert fald den for MVC3 og MVC4).

_Layout.cshtml
Fold kodeboks ind/udHTML kode 


Dine Views:
Fold kodeboks ind/udHTML kode 


ViewBag er et dynamisk objekt, så du kan tilføje de properties du har brug for. Til gengæld er der ingen Intellisense eller syntaksvalidering. Du kan også sætte ViewBag fra din controller.

edit:

Der er også et objekt der hedder ViewData. Kender det ikke særlig godt, men det er et Dictionary. Ved ikke om den kan bruges gennem flere Views, men det kan den nok godt.



Indlæg senest redigeret d. 03.07.2014 15:44 af Bruger #16372
Du skal kigge på sections.

I _Layout.cshtml:
Fold kodeboks ind/udHTML kode 

required er default true.

I dine views:
Fold kodeboks ind/udHTML kode 


Hvis du vil definerer noget default indhold, som skal vises hvis sektionen ikke bliver defineret kan du lave:
Fold kodeboks ind/udHTML kode 


Det skulle løse dit problem langt hen ad vejen. En anden måde er at lave en ordentlig switch eller if-sætninger i din _Layout.cshtml, men det er ikke "pænt og ordentligt".

Du kan evt. overveje en blanding (eller partial views afhængig af route), men så skal du have styr på hvornår sektionerne er til rådighed, da det så vidt jeg husker giver en runtime error, hvis du laver en @section { } til en der ikke eksisterer.

Sektioner er også gode, til at putte sine view-specifikke style- og scriptbundles i :)


Jeg vil vel aldrig få en runtime fejl? Altså hvis alle sections står i layout, så vil de vel altid være defineret?

Så hvis jeg nogle steder skal have sidemenu på vil jeg i det view blot skrive:
Fold kodeboks ind/udHTML kode 


Er det muligt at sende nogle data videre til mit view så min markup kun er i layout, men selve indholdet og data er dem jeg sætter i mit view?
Eventuelt via noget model noget?



Hej Nicky

Nu er det sådan at jeg gerne vil have en image slider i mit layout over mit content.
Hvordan kan jeg fra det enkelte view bestemme om den section skal vises?
Billederne skal ikke ændre sig, så havde tænkt at lave html strukturen i layout, så jeg slap for at definere section i hvert view den skal vises for, med samme kode. Hvordan kan jeg så sætte så den bare kan sige om den skal vise den eller ej?



Undskyld jeg ikke har svaret før, men jeg har været på ferie.

Hvis det er noget fast indhold, som ikke skal variere fra side til side, så behøver du ikke bruge en section. Du kan blot tjekke en variabel om den er sat.

F.eks:

Fold kodeboks ind/udHTML kode 


Du skal nok tjekke efter en NULL-reference, hvis den nu ikke er sat. Har ikke Visual Studio på den her maskine, så kan ikke lige teste.

Fold kodeboks ind/udHTML kode 


Den stump kode placerer du i _Layout.cshtml.





Tak Nicky

Det er helt i orden. Jeg endte også med at løse den sådan som du beskrev der.
Overvejede at lave den som partial view, og så via viewbag sætte en værdi om den skulle vises eller ej, men indtil videre blev det den mere simple måde som du også viste her :)



t