.Net Core 3.5 Blazor parametrii opționali de rută int (Programare, .Net Core, Parametri, Rute, Blazor, Blazor Server Side)

Brett Rossier a intrebat.
a intrebat.

Încerc să-mi dau seama cum să-mi fac parametrii de rută int opționali fără a recurge la procesarea unui sir de întrebări. De exemplu, dacă aș vrea ca param1 și param2 să fie opționali. Dacă încerc să las parametrii int goi atunci când îi trec, nu se va potrivi deloc cu ruta. Așadar,

https://localhost/MyComponent///testString

nu funcționează cu codul în forma de mai jos. Îmi dau seama că aș putea să trec doar 0, dar aceasta este o curiozitate pentru mine în acest moment :).

@page "/MyComponent/{param1:int}/{param2:int}/{param3}"

@code {
    [Parameter] public int? Param1 { get; set; }
    [Parameter] public int? Param2 { get; set; }
    [Parameter] public string Param3 { get; set; }

    ...
}

2 răspunsuri
Brian Parker

Puteți utiliza mai multe @page atribute

MyComponent.razor

@page "/MyComponent"
@page "/MyComponent/{param3}"
@page "/MyComponent/{param1:int}/{param2:int}/{param3}"
@page "/MyComponent/{param1:int}/null/{param3}"
@page "/MyComponent/null/{param2:int}/{param3}"
@page "/MyComponent/null/null/{param3}"

<div class="d-flex flex-column">
<div>Param1 @Param1</div>
<div>Param2 @Param2</div>
<div>Param3 @Param3</div>

<a href="/MyComponent/Test 1">Test 1</a>
<a href="/MyComponent/1/2/Test 2">Test 2</a>
<a href="/MyComponent/3/null/Test 3">Test 3</a>
<a href="/MyComponent/null/4/Test 4">Test 4</a>
<a href="/MyComponent/null/null/Test 5">Test 5</a>
</div>
@code {
    [Parameter] public int? Param1 { get; set; }
    [Parameter] public int? Param2 { get; set; }
    [Parameter] public string Param3 { get; set; }
}

Comentarii

  • Nu este ideal, dar sunt blocat să nu pot face upgrade la .net 5 încă, așa că acest lucru funcționează 🙂 Trebuie doar să mă asigur că îmi păstrez rutele gestionabile în acest fel, pot scăpa ușor de sub control. Mulțumesc! –  > Por Brett Rossier.
Brett Rossier

Pentru enet. Am copiat acest lucru din fereastra mea VS:

@page "/counter/{currentCount:int?}/{Param1:int?}"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    // private int currentCount = 0;

    [Parameter] public int currentCount { get; set; } = 0;
    [Parameter] public int Param1 { get; set; }


    private void IncrementCount() {
        currentCount++;
    }

    protected override void OnInitialized() {
        currentCount = currentCount + Param1;


        base.OnInitialized();
    }
}

Comentarii

  • Nu se poate… Trebuie să funcționeze. Funcționează pe dispozitivul meu. Să-ți spun ceva, fă dublu clic pe numele proiectului tău (nu pe soluție). Ar trebui să vedeți ceva de genul acesta: <Project Sdk=”Microsoft.NET.Sdk.Web”<PropertyGroup> <TargetFramework>net5.0</TargetFramework> </PropertyGroup> </Project> Dacă aveți altceva, eliminați și salvați-l undeva –  > Por enet.
  • Hmmmm… <TargetFramework>netcoreapp3.1</TargetFramework> –  > Por Brett Rossier.
  • De ce nu faceți upgrade la .Net 5.0 ? Oricum, ar trebui să funcționeze în toate versiunile de Blazor. Dacă sunteți interesat, încărcați proiectul complet pe github sau postați aici un link zippat și îl voi rula pe dispozitivul meu. Codul ar trebui să funcționeze…….. –  > Por enet.
  • Nu este posibil în acest moment, deoarece este pentru muncă. Nu funcționează în această versiune de Blazor, evident. Măcar poate că pot să aștept cu nerăbdare să funcționeze în .Net 5 când vom face upgrade-ul. Mulțumesc pentru ajutor. –  > Por Brett Rossier.
  • Ce vrei să spui prin „este pentru muncă”. Omule, ar fi trebuit să creezi o aplicație de marcă nouă, .Net 5.0, să mergi la șablonul implicit pentru componenta Counter și să înlocuiești conținutul acesteia cu codul meu. –  > Por enet.