【问题标题】:Select Option dropdown not displaying selected option选择选项下拉菜单不显示所选选项
【发布时间】:2019-03-29 22:30:24
【问题描述】:

我有一个 Blazor 应用程序,它使用数据库中的数据填充 6 个选择选项下拉列表。其中三个由字符串列表中的日期和时间填充。

当我选择日期和时间时,它不会显示在下拉框中。选择日期时间后,下拉列表为空白,但实际选择了该值并且绑定有效。它只是不显示。

如果我删除“bind=@...”,它会正确显示。 有没有其他人遇到过这种情况,您是如何解决的?

<select bind="@Innput.Klokkeslett1">
                        <option value="@(0)">Tid1</option>
                        @foreach (var tid1 in tidListe)
                        {
                            <option value="@tid1">@tid1</option>
                        }
                    </select>

【问题讨论】:

  • 请出示您的所有代码...

标签: c# html blazor


【解决方案1】:

需要注意两点,select 使用字符串值,并且该值需要与 option 值匹配。 因此,如果您的字段 Innput.Klokkeslett1 是 DateTime,您将需要使用属性来处理字符串和 DateTime 之间的绑定/转换。 如果您确保对 option 值使用明确的日期格式,并且您的属性以相同的日期格式返回它的值,则选择将能够将其 value 与其中一个 option values 匹配并显示相应的文本,可以任意设置格式。

<select bind="@MySelectProxy">
    <option value="@(0)">Tid1</option>
    @foreach (var tid1 in tidListe)
    {
        <option value="@tid1.ToString("yyyy-MM-dd HH:mm:ss")">@tid1</option>
    }
</select>

@functions
{
string MySelectProxy {
  get => Innput.Klokkeslett1.ToString("yyyy-MM-dd HH:mm:ss");
  set => DateTime.TryParse(value, out Innput.Klokkeslett1); 
  }
}

【讨论】:

  • 我没有尝试过你的解决方案,但它让我思考,我发现我在代码中犯了一个愚蠢的错误,将数据库中的日期填充到字符串列表中,这导致了一些问题。一旦我将其更改为控制器中的日期时间列表等,它就解决了所有问题,现在日期在选择时正确显示
  • 可能会帮助其他苦苦挣扎的人:您需要在您的
【解决方案2】:
<select onchange="@ComboSelectionChanged">
        <option value="0" selected>
            @list[0]
        </option>
        @for (int i = 1; i < list.Count; i++)
        {
            <option value="@i">
                @list[i]
            </option>
        }
    </select>    

public void ComboSelectionChanged(UIChangeEventArgs e)
    {
        if (int.TryParse(e.Value.ToString(), out int index))
        {
            SelectedStyleIndex = index
             //now you know which one is selected

        }
    }    

【讨论】:

  • 您没有回答他关于为什么不显示所选项目的问题,尽管“实际选择了值并且绑定有效”。
  • 顺便说一下,这是 Steve Senderson 对你所做的事情的评价:“如果是我,我不想使用 onchange 事件、解析 int 并且通常依赖 DOM跟踪下拉列表的选定索引。而不是所有这些,我更喜欢在 C# 中对选择进行建模,并使用 Blazor 的双向绑定与 DOM 同步”。
  • 这是一个简单有效的解决方案,您可以继续寻找更好的方法。我做了我能做的。下面的第二个答案看起来更好。
猜你喜欢
  • 2021-03-07
  • 2017-07-16
  • 1970-01-01
  • 2014-04-07
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多