diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor index 11ded062a34..b0c50b3674f 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor +++ b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor @@ -12,7 +12,6 @@ data-bb-auto-dropdown-focus="@ShowDropdownListOnFocusString" data-bb-debounce="@DurationString" data-bb-skip-esc="@SkipEscString" data-bb-skip-enter="@SkipEnterString" data-bb-blur="@TriggerBlurString" data-bb-scroll-behavior="@ScrollIntoViewBehaviorString" data-bb-trigger-delete="true" - @bind="@CurrentValueAsString" placeholder="@PlaceHolder" disabled="@Disabled" @ref="FocusElement"/> diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs index 1a671a8d13f..f1fb45b1257 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs +++ b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs @@ -119,6 +119,12 @@ protected override void OnParametersSet() LoadingIcon ??= IconTheme.GetIconByKey(ComponentIcons.LoadingIcon); } + /// + /// + /// + /// + protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, Value); + /// /// Callback method when a candidate item is clicked /// @@ -137,6 +143,9 @@ private async Task OnClickItem(string val) } await TriggerFilter(val); + + // 使用脚本更新 input 值 + await InvokeVoidAsync("setValue", Id, val); } private List Rows => _filterItems ?? [.. Items]; diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.js b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.js index 12208cc111e..98ec1d7129a 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.js +++ b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.js @@ -175,6 +175,14 @@ const handlerKeyup = (ac, e) => { } } +export function setValue(id, value) { + const ac = Data.get(id) + const { input } = ac; + if (input) { + input.value = value; + } +} + export function dispose(id) { const ac = Data.get(id) Data.remove(id) diff --git a/src/BootstrapBlazor/Components/AutoComplete/PopoverCompleteBase.cs b/src/BootstrapBlazor/Components/AutoComplete/PopoverCompleteBase.cs index 8d280f52c37..db2835b49cb 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/PopoverCompleteBase.cs +++ b/src/BootstrapBlazor/Components/AutoComplete/PopoverCompleteBase.cs @@ -158,12 +158,6 @@ protected override void OnParametersSet() Offset ??= "[0, 6]"; } - /// - /// - /// - /// - protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop); - /// /// 触发 OnBlur 回调方法 由 Javascript 触发 /// diff --git a/src/BootstrapBlazor/Components/AutoFill/AutoFill.razor b/src/BootstrapBlazor/Components/AutoFill/AutoFill.razor index eb6c2ee22eb..40e29d49717 100644 --- a/src/BootstrapBlazor/Components/AutoFill/AutoFill.razor +++ b/src/BootstrapBlazor/Components/AutoFill/AutoFill.razor @@ -14,7 +14,6 @@ data-bb-auto-dropdown-focus="@ShowDropdownListOnFocusString" data-bb-debounce="@DurationString" data-bb-skip-esc="@SkipEscString" data-bb-skip-enter="@SkipEnterString" data-bb-scroll-behavior="@ScrollIntoViewBehaviorString" - @bind="@_displayText" placeholder="@PlaceHolder" disabled="@Disabled" @ref="FocusElement" /> diff --git a/src/BootstrapBlazor/Components/AutoFill/AutoFill.razor.cs b/src/BootstrapBlazor/Components/AutoFill/AutoFill.razor.cs index a9a4c43a2ec..71c8fda2eb2 100644 --- a/src/BootstrapBlazor/Components/AutoFill/AutoFill.razor.cs +++ b/src/BootstrapBlazor/Components/AutoFill/AutoFill.razor.cs @@ -184,6 +184,12 @@ protected override void OnParametersSet() Items ??= []; } + /// + /// + /// + /// + protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, _displayText); + private bool IsNullable() => !ValueType.IsValueType || NullableUnderlyingType != null; @@ -199,6 +205,9 @@ protected override void OnParametersSet() /// private async Task OnClearValue() { + // 使用脚本更新 input 值 + await InvokeVoidAsync("setValue", Id, ""); + if (OnClearAsync != null) { await OnClearAsync(); @@ -223,6 +232,9 @@ private async Task OnClickItem(TValue val) CurrentValue = val; _displayText = GetDisplayText(val); + // 使用脚本更新 input 值 + await InvokeVoidAsync("setValue", Id, _displayText); + if (OnSelectedItemChanged != null) { await OnSelectedItemChanged(val); diff --git a/src/BootstrapBlazor/Components/Search/Search.razor b/src/BootstrapBlazor/Components/Search/Search.razor index 14a33fd7393..cae05a7c74a 100644 --- a/src/BootstrapBlazor/Components/Search/Search.razor +++ b/src/BootstrapBlazor/Components/Search/Search.razor @@ -29,7 +29,6 @@ data-bb-skip-esc="@SkipEscString" data-bb-skip-enter="@SkipEnterString" data-bb-blur="@TriggerBlurString" data-bb-scroll-behavior="@ScrollIntoViewBehaviorString" data-bb-input="@UseInputString" - @bind="@_displayText" placeholder="@PlaceHolder" disabled="@Disabled" @ref="FocusElement" /> @if (IsClearable) { diff --git a/src/BootstrapBlazor/Components/Search/Search.razor.cs b/src/BootstrapBlazor/Components/Search/Search.razor.cs index 6c6a713af9e..1dbcd19d6af 100644 --- a/src/BootstrapBlazor/Components/Search/Search.razor.cs +++ b/src/BootstrapBlazor/Components/Search/Search.razor.cs @@ -209,6 +209,12 @@ protected override void OnParametersSet() } } + /// + /// + /// + /// + protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, _displayText); + private string? _displayText; private async Task OnSearchClick() { @@ -229,6 +235,9 @@ private async Task OnSearchClick() private async Task OnClearClick() { + // 使用脚本更新 input 值 + await InvokeVoidAsync("setValue", Id, ""); + _displayText = null; if (OnClear != null) { @@ -252,6 +261,9 @@ private async Task OnClickItem(TValue val) CurrentValue = val; _displayText = GetDisplayText(val); + // 使用脚本更新 input 值 + await InvokeVoidAsync("setValue", Id, _displayText); + if (OnSelectedItemChanged != null) { await OnSelectedItemChanged(val); diff --git a/test/UnitTest/Components/AutoFillTest.cs b/test/UnitTest/Components/AutoFillTest.cs index c5deeb2d05d..ed6f39cdc86 100644 --- a/test/UnitTest/Components/AutoFillTest.cs +++ b/test/UnitTest/Components/AutoFillTest.cs @@ -194,7 +194,7 @@ public void OnGetDisplayText_Ok() pb.Add(a => a.OnGetDisplayText, foo => foo?.Name); }); var input = cut.Find("input"); - Assert.Equal("张三 1000", input.Attributes["value"]?.Value); + Assert.Null(input.Attributes["value"]?.Value); } [Fact]