西装外套<InputSelect>里面<EditForm>?



我什么都试过了,在谷歌上搜索了很多,但仍然无法正常工作。我正在尝试将<EditForm><InputSelect>一起使用来更新现有对象(在我的情况下为video(。

  1. 我想要一个InputSelect@bind-Value="video.DisplayId"。然后第一个选择的选项将是;或者1。if video.DisplayId is null,然后显示"None"。2.if video.DisplayId is not null,显示对象的名称(video.Display.Name(。

  2. 然后将displays的整个列表加载到具有foreach的选项中,但当前选定的除外。

  3. 如果是video.DisplayId is not null,则在"None"的末尾添加一个选项。

加载Blazor页面时,所有内容的值看起来都很好,当我选择(即从video.Display.Name"None"(并点击"保存"时,它就工作了。

但当我从"None"转到display.Name时,它会说Object引用没有设置为对象的实例(请参阅下面的代码,它在哪里说(。

我的代码:

<InputSelect class="form-select" @bind-Value="video.DisplayId">
@if (video.DisplayId is null)
{
<option selected value="">None</option>
}
else 
{
// Object reference not set to an instance of an object ....
<option selected value="@video.DisplayId">@video.Display.Name</option>
}
@foreach (Display display in displays.Where(display => display.Id != video.DisplayId))
{
<option value="@display.Id">@display.Name</option>
}
@if (video.DisplayId is not null)
{
<option value="">None</option>
}
</InputSelect>

我认为这与Blazor以及它在我选择后如何呈现页面有关,但我该如何解决这个问题?

又过了几个小时,我明白了。我需要重写代码如下:

<InputSelect class="form-select" @bind-Value="video.DisplayId">
@if (video.DisplayId is null)
{
<option selected value="">None</option>
}
@foreach (Display display in displays)
{
<option value="@display.Id">@display.Name (ID: @display.Id)</option>
}
@if (video.DisplayId is not null)
{
<option value="">None</option>
}
</InputSelect>

在按下Save后,它会调用我的方法,在我的方法中,它会更改数据库中的数据,然后我必须再次从数据库中获取列表。

@page "/"
<EditForm Model=@video>
<InputSelect @bind-Value=@video.DisplayId>
@if (video.DisplayId is null)
{
<option value="">none</option>
}
else
{
<option value=@selectedDisplay?.Id>@selectedDisplay?.Name</option>
}
@foreach (var display in unSelectedDisplays)
{
<option value=@display.Id>@display.Name</option>
}
@if (video.DisplayId is not null)
{
<option value="">none</option>
}
</InputSelect>
</EditForm>
@code {
private Video video = new Video();
private IEnumerable<Display> displays = Enumerable.Empty<Display>();
private IEnumerable<Display> unSelectedDisplays => 
displays.Where(display => display.Id != video.DisplayId);
Display? selectedDisplay => video.DisplayId.HasValue ?
displays.First(d => d.Id == this.video.DisplayId) :
default(Display);
protected override void OnInitialized()
{
displays = Enumerable.Range(0, 10)
.Select(i => new Display { Id = i, Name = $"Name{i}" });
}
public class Display
{
public int Id { get; set; }
public string? Name { get; set; }
}
public class Video
{
public int? DisplayId { get; set; }
}
}

相关内容

  • 没有找到相关文章

最新更新