> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/da/portal/portal-widgets/syntax.md).

# Syntaks

Lær den PSBlazor-syntaks, der bruges i PowerShell Universal til at definere komponenter, attributter, hændelsescallbacks og databinding for portalwidgets.

PSBlazor er en brugerdefineret syntaks baseret på Blazor- og Razor-sider. Den ligner XML eller XAML og giver en mekanisme til deklarativt at definere en brugergrænseflade.

## Komponenter

Hver komponent defineres med en XML-node, f.eks. `<Button>` eller `<Text>`. Hver komponent har sit eget sæt attributter, der tilpasser funktionsmåden og udseendet af widgetten. Nogle komponenter understøtter underordnet indhold og kan indeholde indlejrede komponenter.

### Definition af en komponent

For at definere en komponent skal De bruge PSBlazor-kodeeditoren til at tilføje komponentens XML-mærker. For at oprette en knap skal De for eksempel gøre følgende.

```xml
<Button>Click Me</Button>
```

Resultatet er en side med en defineret knap.

### Angivelse af attributter

Hver komponent har tilgængelige attributter. I kodeeditoren til PSBlazor-siden anføres attributter automatisk for den aktuelle komponent, De redigerer.

Angivelse af attributter er det samme som at angive en hvilken som helst XML-attribut. Dette eksempel ændrer knappen til danger-tilstanden.

```xml
<Row>
    <Button Danger="true">Click Me</Button>
</Row>
```

Når De gemmer værktøjet, opdateres visningen. Med knappen i tilstanden danger vil De se, at den nu er rød.

### Underordnet indhold

Nogle komponenter giver mulighed for at definere underordnet indhold. De kan bruge noden `<ChildContent>` til at angive, at det er tilfældet.

```xml
<Row>
   <ChildContent>
      <Button>Click Me</Button>
   </ChildContent>
</Row>
```

Hvis der ikke er angivet andre noder i det underordnede af komponenten, antages det at være underordnet indhold. Ovenstående kan forenkles til dette.

```xml
<Row>
    <Button>Click Me</Button>
</Row>
```

Nogle komponenter giver skabelonattributter, der kan angives ved at angive flere underordnede indholdsnoder med de relevante nodenavne. Tabellen kan f.eks. have underordnet indhold, der består af kolonner og en titelskabelon, som definerer, hvordan titlen vises. Når flere underordnede noder er defineret, er `<ChildContent>` påkrævet.

```xml
<Table DataSource="$Services">
   <ChildContent>
       <PropertyColumn Name="Name" />
   </ChildContent>
   <TitleTemplate>
      <Text>My Services</Text>
   </TitleTemplate>
</Table>
```

## PowerShell

Hvert PSBlazor-værktøj eller hver PSBlazor-komponent har en tilknyttet PSM1-fil, der indeholder interaktiv logik. Denne logik kan interagere med moduler, kalde scripts i PSU eller opdatere grænsefladen ud fra data, der er behandlet af scriptet.

### Hændelsescallbacks

Hændelsestilbagekald forekommer, når brugeren interagerer med en PSBlazor-komponent. Dette kan omfatte museklik, formularindsendelser eller tastaturinput. Hændelsestilbagekald er blot PowerShell-funktioner. Følgende kan bruges, når en bruger klikker på en knap.

```powershell
function OnClick {
}
```

### Argumenter

De fleste hændelses-callbacks leverer et objekt, der indeholder oplysninger om hændelsen. Musehændelser indeholder for eksempel oplysninger som koordinaterne for klikket. De kan få adgang til dem ved at angive en `$EventArgs`-parameter.

```powershell
function OnClick {
   param($EventArgs)
}
```

### Kontekst

Nogle komponenter er kontekstuelle. For eksempel en tabelrække eller et formularelement. Kontekstværdier overføres til hændelsescallbacket med parameteren `$Context`.

```powershell
function OnClick {
   param($Context)
}
```

## Variabler

Variabler kan bruges til at opdatere PSBlazor-komponenterne med data fra PowerShell. Brug ordbogen `$Variables` til at hente og angive variabler.

```powershell
$Variables["TestVariable"] = "Not Clicked"

function OnClick {
    $Variables["TestVariable"] = "Clicked"
}
```

I PSBlazor-syntaksen kan De referere til variabler på samme måde, som De ville i PowerShell.

```xml
<Text>$TestVariable</Text>
<Button OnClick="OnClick">Click Me</Button>
```

De kan også bruge variabler i attributter.

```xml
<Alert Message="$TestVariable"></Alert>
<Button OnClick="OnClick">Click Me</Button>
```

Variabler kan også være komplekse objekter som `PSCustomObject` eller `Hashtable`. Hvis de har egenskaber, kan De også referere til dem i PSBlazor-syntaksen.

```xml
<Alert Message="$TestVariable.Name"></Alert>
<Button OnClick="OnClick">Click Me</Button>
```

### Databinding

Databinding giver en mekanisme til at opdatere variabler uden at skulle kalde PowerShell-script. For at definere en binding mellem en attribut på en PSBlazor-komponent skal De bruge syntaksen `bind-{attribute}`.

De kunne f.eks. binde til en `$test`-variabel for et inputfelt som dette.

```xml
<Input bind-Value="$TextValue"></Input>
```

I Deres PowerShell-modul kan De derefter få adgang til variablen fra objektet `$Variables`.

```powershell
$Message.Info($Variables["TextValue"])
```

### Livscyklus

Variabler ryddes, når en bruger opdaterer siden. Variablerne cachelagres ikke ud over dette scope. Hver bruger og hver værktøjsside vil have et forskelligt sæt variabler.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.devolutions.net/powershell-universal/da/portal/portal-widgets/syntax.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
