如何在 Blazor 中绑定单选按钮?

Shr*_*rya 3 c# binding radio-button blazor

blazor 中没有发生单选按钮绑定。根据文档,建议使用 InputRadio 标签,但此标签在 blazor 中不起作用并显示绑定问题。关于如何绑定单选按钮的任何建议

ihi*_*imv 12

The below code works for me

<input type="radio" checked="@(User.Gender == GenderEnum.Male)"
    name="Gender" @onchange="@(() => User.Gender = GenderEnum.Male)" />
<label>Male</label>

<input type="radio" checked="@(User.Gender == GenderEnum.Female)"
    name="Gender" @onchange="@(() => User.Gender = GenderEnum.Female)" />
<label>Female</label>

<input type="radio" checked="@(User.Gender == GenderEnum.Other)"
    name="Gender" @onchange="@(() => User.Gender = GenderEnum.Other)" />
<label>Other</label>
Run Code Online (Sandbox Code Playgroud)

We can also have a function called from @onchange like @onchange="@UpdateGender"


Ath*_*ras 6

当然是,这里有描述:https : //docs.microsoft.com/en-us/aspnet/core/blazor/forms-validation?view=aspnetcore-3.1#radio-buttons

@using System.Globalization
@typeparam TValue
@inherits InputBase<TValue>

<input @attributes="AdditionalAttributes" type="radio" value="@SelectedValue" 
       checked="@(SelectedValue.Equals(Value))" @onchange="OnChange" />

@code {
    [Parameter]
    public TValue SelectedValue { get; set; }

    private void OnChange(ChangeEventArgs args)
    {
        CurrentValueAsString = args.Value.ToString();
    }

    protected override bool TryParseValueFromString(string value, 
        out TValue result, out string errorMessage)
    {
        var success = BindConverter.TryConvertTo<TValue>(
            value, CultureInfo.CurrentCulture, out var parsedValue);
        if (success)
        {
            result = parsedValue;
            errorMessage = null;

            return true;
        }
        else
        {
            result = default;
            errorMessage = $"{FieldIdentifier.FieldName} field isn't valid.";

            return false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法

@page "/RadioButtonExample"
@using System.ComponentModel.DataAnnotations

<h1>Radio Button Group Test</h1>

<EditForm Model="@model" OnValidSubmit="@HandleValidSubmit">
    <DataAnnotationsValidator />
    <ValidationSummary />

    @for (int i = 1; i <= 5; i++)
    {
        <label>
            <InputRadio name="rate" SelectedValue="i" @bind-Value="model.Rating" />
            @i
        </label>
    }

    <button type="submit">Submit</button>
</EditForm>

<p>You chose: @model.Rating</p>

@code {
    private Model model = new Model();

    private void HandleValidSubmit()
    {
        ...
    }

    public class Model
    {
        [Range(1, 5)]
        public int Rating { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 当然可以,但是如果不在 EditForm 中使用 MS InputRadio,如何做到这一点呢?&lt;input type="text"...可以@bind,没有任何问题。如何使用 &lt;input type="radio"... 做到这一点? (2认同)