Drop down menu Blazor select下拉列表按代码设置活动值

Drop down menu Blazor select下拉列表按代码设置活动值,drop-down-menu,html-select,onchange,blazor,blazor-server-side,Drop Down Menu,Html Select,Onchange,Blazor,Blazor Server Side,我正在根据列表的内容动态填充下拉列表的值。选择下拉列表中的项目时,将显示删除该项目的选项。当项目被删除时,它首先从列表中删除,然后重建下拉列表,这就是我遇到问题的地方。在重建下拉列表时,它不会将下拉列表返回到默认值,而仅在删除的下拉列表下方的值显示为选中(在不触发@onchange值的情况下会发生这种情况)。重建下拉列表时,如何使其返回默认值 下面是一些代码,Razor代码: <select class="form-control" @onchange="selectedValue">

我正在根据列表的内容动态填充下拉列表的值。选择下拉列表中的项目时,将显示删除该项目的选项。当项目被删除时,它首先从列表中删除,然后重建下拉列表,这就是我遇到问题的地方。在重建下拉列表时,它不会将下拉列表返回到默认值,而仅在删除的下拉列表下方的值显示为选中(在不触发@onchange值的情况下会发生这种情况)。重建下拉列表时,如何使其返回默认值

下面是一些代码,Razor代码:

<select class="form-control" @onchange="selectedValue">
   <option value="">select one</option>
   @foreach (var mod in values)
   {
        <option value="@mod.Id">@mod.Name</option>
   }
</select>
列表本身(在填充之前):

总而言之,发生了这样的事情:

  • 清单上有许多项目

  • 选择列表是使用@foreach循环(se代码)由列表中的项目构建的

  • 从下拉列表中选择一个项目,这将运行selectedValue()函数并更改selectedValue字符串的值

  • 所选项目将从项目列表中删除

  • 该下拉列表是使用modefied列表重建的

  • 所选项目现在设置为直接位于已删除项目下方的项目,而不运行onchange。这就是问题所在

  • 现在,下拉列表中的选定值与SelectedValue字符串中的一个不对应

  • 这可能可以通过将元素设置为其默认选项/值来解决,但我不知道如何做到这一点

    如何将所选值更改为下拉列表中的默认选项(在我的情况下,是值为“”的“选择一个”选项)

    如何将所选值更改为下拉列表中的默认选项(在我的情况下,是值为“”的“选择一个”选项)

    恐怕您只能使用JSInterop进行以下操作:

    一般来说,在select元素中选择一个选项后,select元素上的selectedIndex属性设置为0。这是在selectedValue方法中完成的

    这是一个完整的工作代码段。运行它并测试它

    @page/“
    选择一个
    @foreach(项目中的var项目)
    {
    @项目名称
    }
    @选择值

    @代码{ [Inject]IJSRuntime JSRuntime{get;set;} 私有元素引用myselect; 列表项=可枚举。范围(1,10)。选择(i=>newitem{ Name=$“Name{i.ToString()}”,ID=i}).ToList(); 公共字符串SelectedValue=“”; public void selectedValue(ChangeEventArgs args args) { SelectedValue=args.Value.ToString(); var item=items.Single(item=>item.ID==Convert.ToInt32(SelectedValue)); 项目。移除(项目); JSRuntime.InvokeVoidAsync(“exampleJsFunctions.selectElement”,myselect); } 公共类项目 { 公共字符串名称{get;set;} 公共int ID{get;set;} } }
    将以下JS代码放入_Host.cshtml文件中:

    
    window.exampleJsFunctions=
    {
    选择元素:函数(元素){
    element.selectedIndex=0;
    }
    };
    
    我认为有一种使用JSInterop的方法可以做到这一点,但我认为可能有一种我刚刚错过的更好的方法。可惜没有。我接受你的回答,谢谢你的帮助@user10483669是的,可以只使用blazor。您只需要使用html+css+blazor编写所有代码。并且不要使用选择选项结构。只需使用、标记,您需要一个下拉弹出窗口,以及blazor处理的一些事件。@Sorush?这是GR8,能举个例子吗?我没有在附近见过任何人,也没有完全让它自己工作。
    public class Items
    {
        public string Name { get; set; }
        public int Id { get; set; }
        public Items(string name, int id)
        {
            Name = name;
            Id = id;
        }
    }
    
    public List<Items> itm = new List<Items>();
    
    public string SelectedValue = "";
    public void selectedValue(ChangeEventArgs selectEvent)
    {
        SelectedValue = selectEvent.Value.ToString();
    }