当在blazor中选择一个选项时如何执行代码

问题描述 投票:1回答:1

当我选择一个选项,但我不知道如何执行此操作时,我试图执行一种方法。

这是我现在正在尝试的<InputSelect/><EditForm/>对象中:

<tr>
   <th>
      <label for="layouts">Layout *</label><br />
      <InputSelect @bind-Value="label.Layout">
            <option value="">Selecteer</option>
            <option value="@availableLayouts.GetValue(0)" @onselect="OnSelectFinalCheck">Eindcontrole</option>
            <option value="@availableLayouts.GetValue(1)" @onselect="OnSelectStock">Voorraad</option>
            <option value="@availableLayouts.GetValue(2)">Uitbesteed werk</option>
            <option value="@availableLayouts.GetValue(3)">Geleidebon label</option>
        </InputSelect>
      <br />
   </th>
<th>

这是我的选择,当我单击“ voorraad”时,我想执行一个方法。

html forms blazor
1个回答
1
投票

注意:在元素中选择了某些文本后,将触发onselect事件。它与select元素或选项的选择无关。据我所记得,InputSelect出现了一些问题,但Blazor团队可能已经解决了这些问题。

下面的代码片段描述了如何在Blazor中使用select元素,以及如何实现双向数据绑定;也就是说,从变量到元素,从元素到变量。您可以通过多种方式来实现:根据大师史蒂夫·安德森的说法,我的代码采用了最有效的方式来实现这一目标。

这是使用双向数据绑定将SelectedAuthorID变量绑定到select元素的代码段。

 <select @bind="@SelectedAuthorID">
    <option value=@(0)></option>
    @foreach (var author in authors)
    {
        <option value="@author.ID">@author.Name</option>
    }
</select>

注意:SelectedAuthorID是定义后备私有变量的属性:

    int _selectedAuthorID;
    private int SelectedAuthorID
    {
        get => _selectedAuthorID;
        set
        {
            if (_selectedAuthorID != value)
            {
                _selectedAuthorID = value;
            }
        }
     }

嗯,这段代码是不言自明的,但是如果您不完全了解我的所作所为,请随时提出。

上面的foreach循环中的authors对象是您可以按以下方式创建的作者列表:

 @code {
     List<Author> authors= Enumerable.Range(1, 10).Select(i => new Author { ID 
                            = i, Name = $"Author {i.ToString()}" }).ToList();

 public class Author
 {
    public int ID { get; set; }
    public string Name { get; set; }
 }  

}

现在,让我们尝试在value="@availableLayouts.GetValue(1)"表达式之后对我的选项进行建模。该表达式的值是字符串文字,对吗?当用户选择此选项时,将调用OnSelectStock做某事。

假设我们要调用OnSelectStock方法,并在选择作者时将作者ID传递给它,而他的ID为偶数。因此我们可以做这样的事情:

    if (_selectedAuthorID != value)
        {
            _selectedAuthorID = value;
            if(value % 2 == 0)
            {
                OnSelectStock( value );
            }

        }

就是这个。

希望这有帮助...

完整的工作代码:

Index.razor

@page "/"

<select @bind="@SelectedAuthorID">
    <option value=@(0)></option>
    @foreach (var author in authors)
    {
        <option value="@author.ID">@author.Name</option>
    }
</select>

<p>Selected Author ID: @authorID</p>

@code{

string authorID;

int _selectedAuthorID;
private int SelectedAuthorID
{
    get => _selectedAuthorID;
    set
    {
        if (_selectedAuthorID != value)
        {
            _selectedAuthorID = value;
      // Call OnSelectStock only if the author ID is an even number
            if (value % 2 == 0)
            {
                OnSelectStock(value);
            }
        }
    }
 }

 List<Author> authors = Enumerable.Range(1, 10).Select(i => new Author 
                { ID = i, Name = $"Author {i.ToString()}" }).ToList();

 private void OnSelectStock(int value)
 {
    authorID = value.ToString();
 }

 public class Author
 {
    public int ID { get; set; }
    public string Name { get; set; }
 }
}
© www.soinside.com 2019 - 2024. All rights reserved.