← Område 3 Prov 2 · Vad provet prövar Repetition

Webbserverprogrammering 1 · område 3 · lektion 21–22

Vad prov 2 prövar

Osäkerhet inför ett prov kostar mer än innehållet. Den här sidan säger vad som kommer, vad som inte kommer, och hur frågorna ser ut. Tre av de fyra frågetyperna har kod i sig – de finns nedan, körda och klara.

1. Formen

2. Vad som kommer

OmrådeUngefärTypiskt innehåll
Komponent kontra sida2 frågorVad @page gör, var en komponent kan användas
Parametrar4 frågor[Parameter], public, typade parametrar, förvalda värden
Dataflöde2 frågorVem bestämmer vad, varför data går nedåt
RenderFragment1 frågaChildContent och namngivna fragment
Routing3 frågorRuttparameter, :int, frågesträng, 404
Layout och livscykel2 frågor@Body, OnInitialized mot OnParametersSet

Det här kommer säkert: skillnaden mellan en komponent och en sida. Vad [Parameter] gör. Vad :int gör. Varför /filmer/99 ska svara 404 och inte 200. Och när OnParametersSet körs.

Det här kommer inte: ingen CSS, inga metodnamn ur ramverket som inte använts i kursen, ingenting om databaser eller tjänster.

Minst tre frågor handlar om kod som bygger

Att något kompilerar räcker aldrig som svar på om det är rätt. Det är områdets kärna, och den syns i provet.

3. Frågetyp 1 – vad skrivs ut?

Du får en komponent och en sida som använder den, och skriver vad som hamnar på skärmen.

Komponenten:

<p>
    @Titel (@Ar) talas på @Sprak.
</p>

@code {
    [Parameter]
    [EditorRequired]
    public string Titel { get; set; } = "";

    [Parameter]
    [EditorRequired]
    public int Ar { get; set; }

    [Parameter]
    public string Sprak { get; set; } = "japanska";
}

Sidan:

@page "/provtraning/1"

@* Frågetyp 1: vad skrivs ut? *@

<h1>Provfråga 1</h1>

<Sats Titel="Sju samurajer" Ar="1954" />
<Sats Titel="Cykeltjuven" Ar="1948" Sprak="italienska" />

@code {
}

Svara innan du klickar.

FrågaSvar
Vad står på sidan? Sju samurajer (1954) talas på japanska. och Cykeltjuven (1948) talas på italienska.
Varför står det japanska på första raden, när sidan aldrig nämner något språk? Sprak har ett förvalt värde. En parameter med förval är frivillig att sätta – sätts den inte används förvalet. Det är fällan i den här frågan.
Vad hade hänt om Titel utelämnats? Ingenting alls vid bygget. [EditorRequired] är en varning i editorn, inte ett krav. Sidan hade renderat med tom titel.

4. Frågetyp 2 – vad är fel?

Ett kodstycke som bygger utan fel och utan varningar, kör utan att krascha – och ändå svarar fel.

@page "/provtraning/2"
@page "/provtraning/2/{sida:int}"

@* Frågetyp 2: vad är fel? Sidan bygger, kraschar inte, och svarar ändå fel. *@

<h1>Sida @Sida av 4</h1>

<p>Visar poster @((Sida - 1) * 10 + 1) till @(Sida * 10).</p>

@code {
    [Parameter]
    public int Sida { get; set; } = 1;
}

Sidan finns på två adresser. Vad blir fel, och på vilken?

FrågaSvar
Vad visar /provtraning/2/3? Sida 3 av 4 och Visar poster 21 till 30. Helt rätt.
Vad visar /provtraning/2? Sida 0 av 4 och Visar poster -9 till 0. Fel, utan ett enda felmeddelande.
Varför? Blazor sätter varje parameter vid varje rendering. Den som inte finns i adressen sätts till typens tomma värde – 0 för int. Startvärdet = 1 skrivs över innan sidan renderas.
Rättningen? public int? Sida { get; set; } och @(Sida ?? 1) där värdet används. Med int? är det tomma värdet null, och då går det att skilja "saknas" från "noll".

5. Frågetyp 3 – skriv koden

Du får en beskrivning och skriver komponenten för hand. Så här kan den lyda:

Skriv en komponent Lagerstatus som tar emot ett antal som int och visar Slut när antalet är noll, Få kvar (N) när det är lågt och I lager (N) annars. Gränsen för "lågt" ska gå att ändra utifrån, men ska vara 3 om ingen säger något.

Ett fullpoängssvar:

<span class="@Klass()">@Text()</span>

@code {
    [Parameter]
    [EditorRequired]
    public int Antal { get; set; }

    [Parameter]
    public int Grans { get; set; } = 3;

    private string Klass() => Antal == 0 ? "etikett etikett-nej" : "etikett etikett-ja";

    private string Text()
    {
        if (Antal == 0)
        {
            return "Slut";
        }

        if (Antal <= Grans)
        {
            return $"Få kvar ({Antal})";
        }

        return $"I lager ({Antal})";
    }
}

Och en sida som använder den:

@page "/provtraning/3"

@* Frågetyp 3: skriv koden. Det här är ett fullpoängssvar. *@

<h1>Provfråga 3</h1>

<Lagerstatus Antal="7" />
<Lagerstatus Antal="0" />
<Lagerstatus Antal="2" Grans="5" />

@code {
}
Vad som ger poäng

[Parameter] på båda, public på båda, rätt typ (int, inte string), och ett förvalt värde på Grans så att den blir frivillig. Att logiken ligger i en metod och inte i markupen ger poäng men är inte ett krav.

Handskriven kod behöver inte kompilera på papper. Ett saknat semikolon kostar ingenting – ett saknat [Parameter] gör det.

6. Frågetyp 4 – förklara

En mening om varför något är som det är. Den här typen har ingen kod, och den går inte att plugga in kvällen före – den kräver att du byggt något och tänkt på varför.

Exempel på hur de kan låta:

7. Fjorton repetitionsfrågor

Svara högt för dig själv innan du klickar på raden. Att känna igen ett svar är inte samma sak som att kunna det.

FrågaSvar
Vad skiljer en sida från en komponent?En rad: @page. Med den har komponenten en egen adress.
Vad heter taggen för en fil som heter FilmKort.razor?<FilmKort />. Taggen är filnamnet, och stor begynnelsebokstav krävs.
Vad gör [Parameter]?Gör en egenskap mottaglig utifrån. Utan attributet vägrar Blazor sätta den.
Varför måste parametern vara public?En private egenskap går inte att sätta utifrån, hur många attribut man än sätter på den.
Vad händer om [Parameter] glöms?Projektet bygger utan fel och utan varningar. Sidan svarar 500 när den öppnas.
Vad gör ett förvalt värde på en parameter?Gör den frivillig att sätta. Sätts den inte används förvalet.
Vad betyder att data flödar nedåt?Sidan bestämmer vad komponenten ska visa. Komponenten kan inte svara tillbaka – annars måste man läsa varenda komponent för att veta vad som händer med datan.
Vad är skillnaden mellan en string-parameter och en RenderFragment?En string skickar in ett värde. En RenderFragment skickar in markup: stycken, listor, till och med andra komponenter.
Varför måste den heta just ChildContent?Blazor letar efter exakt det namnet när det står markup mellan öppnings- och stängningstaggen. Ett annat namn måste skrivas ut som en tagg.
Vad gör :int i {id:int}?Rutten matchar bara om delen är ett heltal, och Blazor gör om texten till int. Utan den kraschar sidan på /filmer/abc.
Vad är skillnaden mellan /filmer/3 och /filmer?sok=cykel?Det första säger vilken sak som ska visas och måste finnas. Det andra säger hur den ska visas och är frivilligt.
Varför räcker det inte att skriva "finns inte" på sidan?Statuskoden blir då 200. Sökmotorer, övervakning och andra program läser koden, inte texten. NavigationManager.NotFound() ger 404.
Vad är @Body?Hålet i layouten, av typen RenderFragment – samma typ som ChildContent. Routern fyller det med sidan.
När körs OnAfterRender vid statisk serverrendering?Aldrig. Servern bygger HTML, skickar i väg den, och komponenten är borta. Det finns ingen sida i webbläsaren att prata med.
Den bästa förberedelsen

Gör klart inlämningen. Provet frågar om exakt det du bygger där – och den som fått sin egen detaljsida att svara 404 på ett id som inte finns behöver inte plugga på den frågan.