Laden...

Blazor: buttonclick soll html select value mit übergeben

Letzter Beitrag vor 4 Jahren 6 Posts 1.901 Views
Blazor: buttonclick soll html select value mit übergeben

Hallo Leute

Ich habe folgenden html code in Blazor:


<select name="Konfigliste">
        @foreach (var konfig in konfigs)
        {
            <option value="@konfig.Name">@konfig.Name</option>
        }
    </select> 

<button class="btn btn-primary" @onclick="@(e=> setAusführen(e, Konfigliste.value))">Ausführen</button>

@code {
private void setAusführen(MouseEventArgs e, string Konfigname)
    {
     //...  
    }
}

Wenn der Button geklickt wird, soll im Code Block die setAusführen() Methode mit dem in der Dropdown Liste ausgewählten Wert aufgerufen werden.
Das funktioniert nicht da Konfigliste.value einen fehler auslöst


error CS0103: Der Name "Konfigliste" ist im aktuellen Kontext nicht vorhanden.

Was muss ich hier ändern, damit das funktioniert?

Grüße
Cornflake

Blazor component: The name 'page' does not exist in the current context

..und Umlaute im Quellcode ist evtl. eine nicht ganz so gute Idee.

..und Umlaute im Quellcode ist evtl. eine nicht ganz so gute Idee.

Da sind andere Sprachen schon viel weiter. 😁

Danke Abt für deine Hinweise.
Die @page Zeile hatte ich vergessen mit in den Codeausschnitt zu übernehmen und den Methdenname habe ich angepasst. Leider ist die Fehlermeldung noch gleich geblieben. Ich hatte in dem offiziellen Blazorbeispielprojekt zu der Counter.razor Seite eigene Klassen und diese Seite hinzugefügt. In der Klasse "Konfig" gibt es die Eigenschaft "Name"


@page "/konfigurationen"

<select name="Konfigliste">
        @foreach (var konfig in konfigs)
        {
            <option value="@konfig.Name">@konfig.Name</option>
        }
    </select> 

<button class="btn btn-primary" @onclick="@(e=> runKonfig(e, Konfigliste.value))">Ausführen</button>

@code {
private void runKonfig(MouseEventArgs e, string Konfigname)
    {
     //...  
    }
}

Wenn der Button geklickt wird, soll im Code Block die runKonfig() Methode mit dem in der Dropdown Liste ausgewählten Wert aufgerufen werden.
Das funktioniert nicht da Konfigliste.value einen Fehler auslöst.


error CS0103: Der Name "Konfigliste" ist im aktuellen Kontext nicht vorhanden.

@pinki: Swift ist ja richtig Sprachflexibel 😃
Grüße
Cornflake

Ich kenne mich mit Blazor nicht besonders gut aus, aber ich finde es merkwürdig, daß du direkt auf das Steuerelement zugreifen willst. Sollte man da nicht DataBinding verwenden, und eine Eigenschaft an den Wert der Liste binden, und dann auf diese Eigenschaft zugreifen? Learn Blazor - Data Binding

Weeks of programming can save you hours of planning

Habs hinbekommen 😃
@MrSparkle Danke für den Link. Bin in diesem Angularbereich noch Anfänger. Bin eher in der Windows-Forms Welt unterwegs.

Hier die Lösung:
Zum Stichwort Two-Way Data Binding.
Im Codeblock wird eine Variable benötigt, die den aus der html Dropdown Liste ausgewählten Wert aufnehmen kann. Diese Variable wird mit @bind an das Control gebunden. Danach kann diese Variable auch im onclick angegeben werden.


@page "/konfigurationen"

<select name="Konfigliste"  @bind="selectedKonfig" >
        @foreach (var konfig in konfigs)
        {
            <option value="@konfig.Name">@konfig.Name</option>
        }
    </select> 

<button class="btn btn-primary" @onclick="@(e=> runKonfig(e, selectedKonfig))">Ausführen</button>

@code 
{
private string selectedKonfig = "";    //Neu !!!

private void runKonfig(MouseEventArgs e, string Konfigname)
    {
     //...  
    }
}