Asp.net core Blazor InputSelect中的第一个选项已显示,但值为空
我在Razor组件中遇到了InputSelect元素的奇怪行为。 在我的输入表单上,我有几个与模型(合作伙伴)绑定的字段。我以下拉选择的形式放置了其中一些字段。因为绑定字段的(PartnerCategory)值是id(整数),所以我从DB中获取一个与所选id对应的名称的查找表 在一个页面上,我可以看到下拉列表中的所有姓名。但是,当我尝试将记录从表单插入数据库时,它会抛出一个SQL异常,因为InputSelect将列表中的第一个值视为NULL。只是想澄清一下-下拉列表中没有空白值,所有名称都会显示出来。它只是将它的值设为NULL。因为数据类型是一个整数,它将NULL转换为零。由于我的表中没有零id,Insert命令失败 下面是我的简化代码Asp.net core Blazor InputSelect中的第一个选项已显示,但值为空,asp.net-core,blazor,Asp.net Core,Blazor,我在Razor组件中遇到了InputSelect元素的奇怪行为。 在我的输入表单上,我有几个与模型(合作伙伴)绑定的字段。我以下拉选择的形式放置了其中一些字段。因为绑定字段的(PartnerCategory)值是id(整数),所以我从DB中获取一个与所选id对应的名称的查找表 在一个页面上,我可以看到下拉列表中的所有姓名。但是,当我尝试将记录从表单插入数据库时,它会抛出一个SQL异常,因为InputSelect将列表中的第一个值视为NULL。只是想澄清一下-下拉列表中没有空白值,所有名称都会显示
<EditForm Model="@partner">
<InputSelect @bind-Value="partner.PartnerCategoryId">
@if (categoryList != null)
{
@foreach (var item in categoryList.OrderBy(x => x.PartnerCategoryId))
{
<option value="@item.PartnerCategoryId">@item.Name</option>
}
}
</InputSelect>
</EditForm>
@code {
Partner partner = new Partner();
private IEnumerable<PartnerCategory> categoryList;
protected override async Task OnInitializedAsync()
{
categoryList = await CategoryService.GetAllAsync();
}
}
@if(categoryList!=null)
{
@foreach(categoryList.OrderBy(x=>x.PartnerCategoryId)中的变量项)
{
@项目名称
}
}
@代码{
合作伙伴=新合作伙伴();
私有IEnumerable分类列表;
受保护的重写异步任务OnInitializedAsync()
{
categoryList=等待CategoryService.GetAllAsync();
}
}
我该怎么办?它是否在从数据库获取数据之前将值绑定到模型?要解决此问题,您可以在代码中添加
选择…
,如下所示:
<InputSelect @bind-Value="partner.PartnerCategoryId">
@if (categoryList != null)
{
<option value="">Select...</option>
@foreach (var item in categoryList.OrderBy(x => x.PartnerCategoryId))
{
<option value="@item.PartnerCategoryId">@item.Name</option>
}
}
</InputSelect>
private void HandleValidSubmit()
{
// Put code here to save your record in the database
}
这将阻止“提交”表单,除非用户选择了值
要测试新更改,请执行以下操作:
将OnValidSubmit
属性添加到EditForm
组件中,并将其值设置为“HandleValidSubmit
”
添加HandleValidSubmit
方法,如下所示:
<InputSelect @bind-Value="partner.PartnerCategoryId">
@if (categoryList != null)
{
<option value="">Select...</option>
@foreach (var item in categoryList.OrderBy(x => x.PartnerCategoryId))
{
<option value="@item.PartnerCategoryId">@item.Name</option>
}
}
</InputSelect>
private void HandleValidSubmit()
{
// Put code here to save your record in the database
}
在编辑表单底部添加提交按钮:
<p><button type="submit">Submit</button></p>
要解决此问题,您可以在代码中添加
选择…
,如下所示:
<InputSelect @bind-Value="partner.PartnerCategoryId">
@if (categoryList != null)
{
<option value="">Select...</option>
@foreach (var item in categoryList.OrderBy(x => x.PartnerCategoryId))
{
<option value="@item.PartnerCategoryId">@item.Name</option>
}
}
</InputSelect>
private void HandleValidSubmit()
{
// Put code here to save your record in the database
}
这将阻止“提交”表单,除非用户选择了值
要测试新更改,请执行以下操作:
将OnValidSubmit
属性添加到EditForm
组件中,并将其值设置为“HandleValidSubmit
”
添加HandleValidSubmit
方法,如下所示:
<InputSelect @bind-Value="partner.PartnerCategoryId">
@if (categoryList != null)
{
<option value="">Select...</option>
@foreach (var item in categoryList.OrderBy(x => x.PartnerCategoryId))
{
<option value="@item.PartnerCategoryId">@item.Name</option>
}
}
</InputSelect>
private void HandleValidSubmit()
{
// Put code here to save your record in the database
}
在编辑表单底部添加提交按钮:
<p><button type="submit">Submit</button></p>
谢谢你的工作谢谢你的工作