diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs index cc8abb6095..2f4440b904 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs @@ -31,6 +31,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form public string AutocompleteFilterParamName { get; set; } + public string AutocompleteSelectedItemName { get; set; } + + public string AutocompleteSelectedItemValue { get; set; } + public AbpSelectTagHelper(AbpSelectTagHelperService tagHelperService) : base(tagHelperService) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index 534801d126..7741807aae 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Mvc.Diagnostics; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.TagHelpers; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; @@ -85,6 +86,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { selectTagHelper.Items = GetSelectItems(context, output); } + else + { + selectTagHelper.Items = new SelectListItem[] + { + new SelectListItem(TagHelper.AutocompleteSelectedItemName,TagHelper.AutocompleteSelectedItemValue,true) + }; + } var selectTagHelperOutput = await selectTagHelper.ProcessAndGetOutputAsync(GetInputAttributes(context, output), context, "select", TagMode.StartTagAndEndTag); @@ -107,6 +115,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form output.Attributes.Add("data-autocomplete-display-property", TagHelper.AutocompleteDisplayPropertyName); output.Attributes.Add("data-autocomplete-value-property", TagHelper.AutocompleteValuePropertyName); output.Attributes.Add("data-autocomplete-filter-param-name", TagHelper.AutocompleteFilterParamName); + output.Attributes.Add("data-autocomplete-selected-item-name", TagHelper.AutocompleteSelectedItemName); + output.Attributes.Add("data-autocomplete-selected-item-value", TagHelper.AutocompleteSelectedItemValue); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js index 4489a234c1..431d9093f7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js @@ -80,6 +80,18 @@ var displayValue = $(this).data("autocompleteValueProperty"); var itemsPropertyName = $(this).data("autocompleteItemsProperty"); var filterParamName = $(this).data("autocompleteFilterParamName"); + var selectedText = $(this).data("autocompleteSelectedItemName"); + var name = $(this).attr("name"); + var selectedTextInputName = name.substring(0, name.length - 1) + "_Text]"; + var selectedTextInput = $('', { + type: 'hidden', + id: selectedTextInputName, + name: selectedTextInputName, + }); + if (selectedText != "") { + selectedTextInput.val(selectedText); + } + selectedTextInput.insertAfter($select); $select.select2({ ajax: { url: url, @@ -109,6 +121,9 @@ }, width: '100%' }); + $select.on('select2:select', function (e) { + selectedTextInput.val(e.params.data.text); + }); }); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/CachedObjectExtensionsDtoService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/CachedObjectExtensionsDtoService.cs index 651f3ed93e..22102f82c5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/CachedObjectExtensionsDtoService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/CachedObjectExtensionsDtoService.cs @@ -140,8 +140,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending }, OnTable = new ExtensionPropertyUiTableDto { - IsVisible = propertyConfig.UI.OnTable.IsVisible && - propertyConfig.UI.Lookup.Url.IsNullOrEmpty() + IsVisible = propertyConfig.UI.OnTable.IsVisible }, Lookup = new ExtensionPropertyUiLookupDto { diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs index d03696b642..384fc355f9 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using JetBrains.Annotations; +using Volo.Abp.Localization; namespace Volo.Abp.ObjectExtending.Modularity { @@ -47,14 +48,29 @@ namespace Volo.Abp.ObjectExtending.Modularity propertyName, () => new ExtensionPropertyConfiguration(this, propertyType, propertyName) ); - configureAction?.Invoke(propertyInfo); NormalizeProperty(propertyInfo); + AddLookupProperty(propertyInfo); + return this; } + private void AddLookupProperty(ExtensionPropertyConfiguration propertyInfo) + { + if (!propertyInfo.UI.Lookup.Url.IsNullOrEmpty()) + { + var lookupPropertyName = $"{propertyInfo.Name}_Text"; + var lookupPropertyInfo = Properties.GetOrAdd( + lookupPropertyName, + () => new ExtensionPropertyConfiguration(this, typeof(string), lookupPropertyName) + ); + lookupPropertyInfo.DisplayName = propertyInfo.DisplayName ?? new FixedLocalizableString(propertyInfo.Name); + propertyInfo.UI.OnTable.IsVisible = false; + } + } + [NotNull] public virtual ImmutableList GetProperties() {