Adgang til layout fra view?

Tags:    asp.net

Hejsa

I webforms kan man få adgang til en placeholder på sin master-page fra sine sider og webforms, men når det er i MVC hvordan gør man så lige?

Jeg tænker her på at man fx gerne vil inkludere nogle specifikke CSS-filer til det enkelte view, eller nogle scripts til den enkelte side og uden at de skal ligge inde midt i dokumentet.
Hvordan gør man lige det i MVC?

Eller hvis man har et view der skal renderes inden i et andet view hvordan kan man så fra det inderste view få adgang til noget på det yderste view?



4 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 13 karma
Sorter efter stemmer Sorter efter dato
Du tænker forkert på det :-) Det nemmeste for dig er at droppe tanken om at du skal gøre det på samme måde - der er ikke noget af det der kan sammenlignes. I WebForms havde du adgang (via lokale variable) til dine kontroller (labels, tekstbokse, placeholders osv.) det er "unaturligt" og et trick Microsoft lavede fordi de synes det er smart at kunne holde tilstand i sin UI. Det er det bestemt ikke og det er meget dprlig stil.

Det du skal tænke over er at du skal give nok informationer til dit View således det kan renderes. Mht. CSS filer kan du jo "bare" lave en sektion i head tagget som du så fra dine andre views smider et stylesheet i, eller lader være hvis ikke det er nødvendigt. (hvis du skal have eksempler skal jeg lige vide om det er MVC 2 eller 3(4).

Mht. views i views så tænker du igen i webforms, det du skriver giver mest kun mening i et WebForms miljø. Du kan altid lave "mini views" eller user controller som kan kaldes alle steder og som kan hjælpe dig med til at genbruge kode. Du kan så kalde dem med Html.RenderPartial("navn");

Når du lige får drejet hovedet til MVC vil du se at det er meget nemmere end WebForms.



Jeg tror at sections vil løse alle dine problemer. I princippet skriver du i dit layout @RenderSection kommandoen, der hvor man fra dine "nedarvede" sider skal kunne sætte noget ind. Fx. i din head sektion til CSS, eller til menuer eller lignende. Når du så på din underside, fx. VisKunde skal have noget skrevet ud i menuen eller i <head> tagget, laver du en sektion hvor du så kan skrive direkte ind i dit layout.

Hvis man skal sammenligne med WebForms :-) svarer Layouts jo til MAsterpages, mens sektioner svarer til ContentPlaceholders.

Her er en god beskrivelse af det fra Scott Guthrie: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx



Du tænker forkert på det :-) Det nemmeste for dig er at droppe tanken om at du skal gøre det på samme måde - der er ikke noget af det der kan sammenlignes. I WebForms havde du adgang (via lokale variable) til dine kontroller (labels, tekstbokse, placeholders osv.) det er "unaturligt" og et trick Microsoft lavede fordi de synes det er smart at kunne holde tilstand i sin UI. Det er det bestemt ikke og det er meget dprlig stil.

Det du skal tænke over er at du skal give nok informationer til dit View således det kan renderes. Mht. CSS filer kan du jo "bare" lave en sektion i head tagget som du så fra dine andre views smider et stylesheet i, eller lader være hvis ikke det er nødvendigt. (hvis du skal have eksempler skal jeg lige vide om det er MVC 2 eller 3(4).

Mht. views i views så tænker du igen i webforms, det du skriver giver mest kun mening i et WebForms miljø. Du kan altid lave "mini views" eller user controller som kan kaldes alle steder og som kan hjælpe dig med til at genbruge kode. Du kan så kalde dem med Html.RenderPartial("navn");

Når du lige får drejet hovedet til MVC vil du se at det er meget nemmere end WebForms.
Tak for svar Brian

Jeg synes nemlig også MVC er meget smartere og mere lækkert end webforms.
Jeg arbejder i MVC3 fordi jeg stødte på et problem i MVC4 med JSON responses som så virkede i MVC3, så den holder jeg fast i til .NET 4.5 officielt releases sammen med MVC4 så jeg er sikker på det ikke er betarelease fejl.

Jeg har ikke erfaring med sections, så det er da noget jeg skal have set nærmere på.

Jeg har allerede brugt et partial view, men er ikke sikker på hvordan jeg kan sætte et partial view ind i mit layout-view i head-tagget og fra mit product-view kan sige at nu skal der inkluderes css1 og css2, og jQuery og dette script til dette view (i partial viewet i head i layout-viewet).
Jeg havde et view der skulle vise firma-information ud fra et produkt og kunne dermed videresende ansvaret for at rendere dette til mit partial view fordi det lå "under", men er ikke sikker på hvordan jeg kan manipulere viewet i layout (uden at overskrive alt andet) fra mit view fordi det ikke er underliggende.

Har skulle lave nogle rettelser til webforms i forbindelse med mit arbejde og det kan godt irritere mig jeg "ikke bare lige" kan gøre tingene logisk og nemt, men skal bøvle med en masse unødigt fordi webforms er anderledes og ikke særligt "smart" når man har set lyset med MVC.



Indlæg senest redigeret d. 08.10.2012 10:06 af Bruger #17215
Jeg tror at sections vil løse alle dine problemer. I princippet skriver du i dit layout @RenderSection kommandoen, der hvor man fra dine "nedarvede" sider skal kunne sætte noget ind. Fx. i din head sektion til CSS, eller til menuer eller lignende. Når du så på din underside, fx. VisKunde skal have noget skrevet ud i menuen eller i <head> tagget, laver du en sektion hvor du så kan skrive direkte ind i dit layout.

Hvis man skal sammenligne med WebForms :-) svarer Layouts jo til MAsterpages, mens sektioner svarer til ContentPlaceholders.

Her er en god beskrivelse af det fra Scott Guthrie: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx
Tak Brian

Jeg vil se nærmere på det senere i dag eller i morgen når jeg får tid :)



Indlæg senest redigeret d. 08.10.2012 11:33 af Bruger #17215
t