Blazor Select 元素我无法设置 ChangeEvent
Blazor Select Element I Can Not Set The ChangeEvent
当 select 元素绑定到字段时,我看不到如何在该元素上设置更改事件。
当我 select 名称选择器列表中的名称时,第二个列表反映了更改。
<div>
<p>Name Chooser</p>
<select @onchange="OnChange">
@foreach (var name in Names)
{
<option>@name</option>
}
</select>
</div>
<select @bind="@chosenName">
@foreach (var name in Names)
{
<option>@name</option>
}
</select>
@code{
string chosenName = "Peter";
List<string> Names = new List<string>() { "Paul", "Peter", "Jane", "Jackie" };
void OnChange(ChangeEventArgs e)
{
chosenName = e.Value.ToString();
}
void OnChange2(ChangeEventArgs e)
{
}
}
我的问题是当我用鼠标 select 时如何检测列表 2 上的更改事件。此代码引发编译器错误。
<select @bind="@chosenName" @onchange="OnChange2">
您实际上不需要绑定任何内容,因为 onchange
事件会发送下拉列表所需的所有信息。在许多情况下,您甚至不需要事件处理程序。您可以只使用 lambda 方法设置一个变量。
可能是这样的:
<div>
<p>Name Chooser</p>
<select @onchange="args => chosenName = args.Value.ToString()">
@foreach (var name in Names)
{
<option selected>@name</option>
}
</select>
</div>
<select @onchange="OnChange2">
@foreach (var name in Names)
{
if (name == chosenName)
{
<option selected>@name</option>
}
else
{
<option>@name</option>
}
}
</select>
@code{
string chosenName = "Peter";
List<string> Names = new List<string>() { "Paul", "Peter", "Jane", "Jackie" };
void OnChange2(ChangeEventArgs e)
{
}
}
这是使用 getter 和 setter 的替代方法。它让 Blazor 处理控制事件。
@page "/select2"
<div>
<p>Name Chooser</p>
<select @bind="name">
@foreach (var name in Names)
{
<option>@name</option>
}
</select>
</div>
<select @bind="@chosenName">
@foreach (var name in Names)
{
<option>@name</option>
}
</select>
@code{
string name
{
get => _name;
set
{
if (!value.Equals(_name))
{
_name = value;
// do something or trigger an event;
_chosenname = value;
}
}
}
string chosenName
{
get => _chosenname;
set
{
if (!value.Equals(_chosenname))
{
_chosenname = value;
// do something or trigger an event;
}
}
}
string _name = null;
string _chosenname = "Peter";
List<string> Names = new List<string>() { "Paul", "Peter", "Jane", "Jackie" };
}
当 select 元素绑定到字段时,我看不到如何在该元素上设置更改事件。 当我 select 名称选择器列表中的名称时,第二个列表反映了更改。
<div>
<p>Name Chooser</p>
<select @onchange="OnChange">
@foreach (var name in Names)
{
<option>@name</option>
}
</select>
</div>
<select @bind="@chosenName">
@foreach (var name in Names)
{
<option>@name</option>
}
</select>
@code{
string chosenName = "Peter";
List<string> Names = new List<string>() { "Paul", "Peter", "Jane", "Jackie" };
void OnChange(ChangeEventArgs e)
{
chosenName = e.Value.ToString();
}
void OnChange2(ChangeEventArgs e)
{
}
}
我的问题是当我用鼠标 select 时如何检测列表 2 上的更改事件。此代码引发编译器错误。
<select @bind="@chosenName" @onchange="OnChange2">
您实际上不需要绑定任何内容,因为 onchange
事件会发送下拉列表所需的所有信息。在许多情况下,您甚至不需要事件处理程序。您可以只使用 lambda 方法设置一个变量。
可能是这样的:
<div>
<p>Name Chooser</p>
<select @onchange="args => chosenName = args.Value.ToString()">
@foreach (var name in Names)
{
<option selected>@name</option>
}
</select>
</div>
<select @onchange="OnChange2">
@foreach (var name in Names)
{
if (name == chosenName)
{
<option selected>@name</option>
}
else
{
<option>@name</option>
}
}
</select>
@code{
string chosenName = "Peter";
List<string> Names = new List<string>() { "Paul", "Peter", "Jane", "Jackie" };
void OnChange2(ChangeEventArgs e)
{
}
}
这是使用 getter 和 setter 的替代方法。它让 Blazor 处理控制事件。
@page "/select2"
<div>
<p>Name Chooser</p>
<select @bind="name">
@foreach (var name in Names)
{
<option>@name</option>
}
</select>
</div>
<select @bind="@chosenName">
@foreach (var name in Names)
{
<option>@name</option>
}
</select>
@code{
string name
{
get => _name;
set
{
if (!value.Equals(_name))
{
_name = value;
// do something or trigger an event;
_chosenname = value;
}
}
}
string chosenName
{
get => _chosenname;
set
{
if (!value.Equals(_chosenname))
{
_chosenname = value;
// do something or trigger an event;
}
}
}
string _name = null;
string _chosenname = "Peter";
List<string> Names = new List<string>() { "Paul", "Peter", "Jane", "Jackie" };
}