C# Blazor服务器:<;InputSelect和@oninput事件给出了奇怪的行为
我有一系列3个InputSelects,第二个是通过SQL查询从第一个级联而来的。当通过oninput事件选择第一个下拉列表时,我有额外的逻辑运行。(我知道onchange和bind值不能在同一个元素上声明) 选择第一个后,我的值将填充,但在一瞬间从文本区域消失,尽管数据实际上存在于模型中,并且通过使用相关记录填充第二个框,其余逻辑正常工作: 选择前: 选择后: 相关代码:C# Blazor服务器:<;InputSelect和@oninput事件给出了奇怪的行为,c#,.net-core,blazor,C#,.net Core,Blazor,我有一系列3个InputSelects,第二个是通过SQL查询从第一个级联而来的。当通过oninput事件选择第一个下拉列表时,我有额外的逻辑运行。(我知道onchange和bind值不能在同一个元素上声明) 选择第一个后,我的值将填充,但在一瞬间从文本区域消失,尽管数据实际上存在于模型中,并且通过使用相关记录填充第二个框,其余逻辑正常工作: 选择前: 选择后: 相关代码: <EditForm Model="@plansold" OnValidSubmit=&quo
<EditForm Model="@plansold" OnValidSubmit="HandleValidSubmit" OnInvalidSubmit="HandleInvalidSubmit">
<FluentValidator />
<div class="row">
<div class="col-md-4">
<div class="form-group">
@if (categories == null)
{<p><em>Loading ...</em></p>} //Null check
else
{
<InputSelect TValue="string" class="form-control" @bind-Value="plansold.PlanCategoryDesc" @oninput="CategoryChange">
<option value="Select..." selected disabled="disabled">(Select Plan Category)</option>
@foreach (var c in categories)
{
<option value="@c.id"> @c.Description</option>
}
</InputSelect>
<ValidationMessage For="@(() => plansold.PlanCategoryDesc)" class="text-danger" />
}
</div>
</div>
最初,这些都是简单的元素,使用@onchange,效果很好,但是为了让验证消息像我的文本框那样消失,我切换到并在兔子洞里呆了一整天,试图将行为设置正确。我还尝试了bind Value:event=“CategoryChange”但没有成功
这是Blazor服务器5.0。有人知道如何在oninput事件之后将显示持久化到下拉元素中吗
谢谢 为Syncfusion控件竖起两个大拇指:
<div class="col-md-4">
<div class="form-group">
@if (categories == null)
{<p><em>Loading ...</em></p>} //Null check
else
{
<div class="padding-top">
<SfDropDownList TItem="ITQA_CategoryModel" TValue="string" Placeholder="(Select Plan Category)" PopupHeight="auto" DataSource="@categories">
<DropDownListEvents TItem="ITQA_CategoryModel" TValue="string" ValueChange="@CategoryChange"></DropDownListEvents>
<DropDownListFieldSettings Text="Description" Value="id"></DropDownListFieldSettings>
</SfDropDownList>
<ValidationMessage For="@(() => plansold.PlanCategoryDesc)" class="text-danger" />
</div>
}
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<div class="padding-top">
<SfDropDownList Enabled="@PlansDetailEnabled" TItem="ITQA_PlansModel" TValue="string" Placeholder="(Select Plan Length)" PopupHeight="auto" DataSource="@plans">
<DropDownListEvents TItem="ITQA_PlansModel" TValue="string" ValueChange="@PlanChange"></DropDownListEvents>
<DropDownListFieldSettings Text="PlanLength" Value="id"></DropDownListFieldSettings>
</SfDropDownList>
<ValidationMessage For="@(() => plansold.PlanLength)" class="text-danger" />
</div>
</div>
</div>
private async Task CategoryChange(Syncfusion.Blazor.DropDowns.ChangeEventArgs<string, ITQA_CategoryModel> args)
{
if (string.IsNullOrWhiteSpace(args.Value.ToString()) == false)
{
catid = Convert.ToInt32(args.Value);
plans = await plansService.GetPlanOptions(catid);
plansold.PlanCategory = Convert.ToInt32(args.Value);
plansold.PlanCategoryDesc = args.ItemData.Description;
PlansDetailEnabled = true;
}
}
private void PlanChange(Syncfusion.Blazor.DropDowns.ChangeEventArgs<string, ITQA_PlansModel> args)
{
if (string.IsNullOrWhiteSpace(args.Value.ToString()) == false)
{
plansold.PlanLength = args.ItemData.PlanLength;
plansold.PlanCost = args.ItemData.PlanCost;
}
}
@如果(类别==null)
{正在加载…}//Null检查
其他的
{
}
专用异步任务类别更改(Syncfusion.Blazor.DropDowns.ChangeEventArgs args)
{
if(string.IsNullOrWhiteSpace(args.Value.ToString())==false)
{
catid=转换为32(参数值);
计划=等待计划服务.GetPlanOptions(catid);
PlanSeld.PlanCategory=转换为32(参数值);
plansaled.PlanCategoryDesc=args.ItemData.Description;
PlansDetailEnabled=真;
}
}
私有void平面更改(Syncfusion.Blazor.DropDowns.ChangeEventArgs args)
{
if(string.IsNullOrWhiteSpace(args.Value.ToString())==false)
{
PlanSeld.PlanLength=args.ItemData.PlanLength;
plansaled.PlanCost=args.ItemData.PlanCost;
}
}
<div class="col-md-4">
<div class="form-group">
@if (categories == null)
{<p><em>Loading ...</em></p>} //Null check
else
{
<div class="padding-top">
<SfDropDownList TItem="ITQA_CategoryModel" TValue="string" Placeholder="(Select Plan Category)" PopupHeight="auto" DataSource="@categories">
<DropDownListEvents TItem="ITQA_CategoryModel" TValue="string" ValueChange="@CategoryChange"></DropDownListEvents>
<DropDownListFieldSettings Text="Description" Value="id"></DropDownListFieldSettings>
</SfDropDownList>
<ValidationMessage For="@(() => plansold.PlanCategoryDesc)" class="text-danger" />
</div>
}
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<div class="padding-top">
<SfDropDownList Enabled="@PlansDetailEnabled" TItem="ITQA_PlansModel" TValue="string" Placeholder="(Select Plan Length)" PopupHeight="auto" DataSource="@plans">
<DropDownListEvents TItem="ITQA_PlansModel" TValue="string" ValueChange="@PlanChange"></DropDownListEvents>
<DropDownListFieldSettings Text="PlanLength" Value="id"></DropDownListFieldSettings>
</SfDropDownList>
<ValidationMessage For="@(() => plansold.PlanLength)" class="text-danger" />
</div>
</div>
</div>
private async Task CategoryChange(Syncfusion.Blazor.DropDowns.ChangeEventArgs<string, ITQA_CategoryModel> args)
{
if (string.IsNullOrWhiteSpace(args.Value.ToString()) == false)
{
catid = Convert.ToInt32(args.Value);
plans = await plansService.GetPlanOptions(catid);
plansold.PlanCategory = Convert.ToInt32(args.Value);
plansold.PlanCategoryDesc = args.ItemData.Description;
PlansDetailEnabled = true;
}
}
private void PlanChange(Syncfusion.Blazor.DropDowns.ChangeEventArgs<string, ITQA_PlansModel> args)
{
if (string.IsNullOrWhiteSpace(args.Value.ToString()) == false)
{
plansold.PlanLength = args.ItemData.PlanLength;
plansold.PlanCost = args.ItemData.PlanCost;
}
}