Asp.net core Blazor InputSelect中的第一个选项已显示,但值为空

Asp.net core Blazor InputSelect中的第一个选项已显示,但值为空,asp.net-core,blazor,Asp.net Core,Blazor,我在Razor组件中遇到了InputSelect元素的奇怪行为。 在我的输入表单上,我有几个与模型(合作伙伴)绑定的字段。我以下拉选择的形式放置了其中一些字段。因为绑定字段的(PartnerCategory)值是id(整数),所以我从DB中获取一个与所选id对应的名称的查找表 在一个页面上,我可以看到下拉列表中的所有姓名。但是,当我尝试将记录从表单插入数据库时,它会抛出一个SQL异常,因为InputSelect将列表中的第一个值视为NULL。只是想澄清一下-下拉列表中没有空白值,所有名称都会显示

我在Razor组件中遇到了InputSelect元素的奇怪行为。 在我的输入表单上,我有几个与模型(合作伙伴)绑定的字段。我以下拉选择的形式放置了其中一些字段。因为绑定字段的(PartnerCategory)值是id(整数),所以我从DB中获取一个与所选id对应的名称的查找表

在一个页面上,我可以看到下拉列表中的所有姓名。但是,当我尝试将记录从表单插入数据库时,它会抛出一个SQL异常,因为InputSelect将列表中的第一个值视为NULL。只是想澄清一下-下拉列表中没有空白值,所有名称都会显示出来。它只是将它的值设为NULL。因为数据类型是一个整数,它将NULL转换为零。由于我的表中没有零id,Insert命令失败

下面是我的简化代码

<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>

谢谢你的工作谢谢你的工作