[ELMA3] Выбор значения из справочника (пример при вводе адреса сделать выбор города из списка справочника городов)
Пример:
Нужно при вводе адреса в модуле CRM сделать выбор города из списка справочника городов
- Создать справочник городов в дизайнере (или использовать существующий, если есть).
- Копируем файл представления из D:\Work3\EleWise.ELMA\Applications\BPM\EleWise.ELMA.BPM.Web\Modules\EleWise.ELMA.CRM.Web\Views\Shared\EditorTemplates\Entities\Address.cshtml в папку конфигурации \WebApplication\Modules\EleWise.ELMA.CRM.Web\Views\Shared\EditorTemplates\Entities\Address.cshtml (редактировать этот новый файл).
- Изменить код файла на следующий:
В начале файла
1 2 3 4 5 | @ using EleWise.ELMA.Web.Mvc.Models.Boxes @{ // UID справочника var cityCatalogUid = "00da4d30-3091-4f5f-b6ce-9747a6113827" ; } |
Заменяем старое поле для ввода города (@Html.EditableProperty(m => m.City)) на код ниже
1 2 3 4 5 6 | @{ // Установим текущее значение var selectedItems = Model != null && ! string .IsNullOrEmpty( Model.City ) ? new List <AutocompleteItem> { new AutocompleteItem { Text = Model.City.ToString(), Value = "" } } : new List<AutocompleteItem>(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @Html.AutocompleteComboBox( new AutocompleteComboBox { // Разрешим ручной ввод AutoFill = false , HtmlAttributes = new HtmlAttributes { style = new HtmlStyle { width = "300px" } }, // Метод и контроллер, который возвращает данные справочника для Select ActionName = "Select" , ControllerName = "Entity" , RouteValueDictionary = new RouteValueDictionary { { "area" , "EleWise.ELMA.BPM.Web.Common" }, { "uid" , new Guid(cityCatalogUid) } }, // Имя элемента на странице Name = ViewData.TemplateInfo .GetFullHtmlFieldName( "CityCatalogCombobox" ), SelectedEntities = selectedItems, // Событие на клиенте, при изменении значения OnChange = string .Format( "function (e) {{ OnAddressCitySelect(e, ’{0}’); }}" , ViewData.TemplateInfo.GetFullHtmlFieldName( "City" )) }) @Html.HiddenFor(m => m.City) |
1 | @Html.AutocompleteComboBox( new AutocompleteComboBox { // Разрешим ручной ввод AutoFill = false, HtmlAttributes = new HtmlAttributes { style = new HtmlStyle { width = "300px" } }, // Метод и контроллер, который возвращает данные справочника для Select ActionName = "Select", ControllerName = "Entity", RouteValueDictionary = new RouteValueDictionary { { "area" , "EleWise.ELMA.BPM.Web.Common" }, { "uid", new Guid(cityCatalogUid) } }, // Имя элемента на странице Name = ViewData.TemplateInfo .GetFullHtmlFieldName( "CityCatalogCombobox"), SelectedEntities = selectedItems, // Событие на клиенте, при изменении значения OnChange = string.Format( "function (e) {{ OnAddressCitySelect(e, ’{0}’); }}", ViewData.TemplateInfo.GetFullHtmlFieldName("City")) }) @Html.HiddenFor(m => m.City) |
Примечание
Для корректной работы кода необходимо в строке 17 заменить кавычки ’{0}’ на ’{0}’.
Скрипт, который будет записывать выбранное значение в скрытое поле модели:
1 2 3 4 5 6 7 8 9 | @{ Html.RegisterContent( "OnAddressCitySelect" ,@<text> <script type= "text/javascript" > function OnAddressCitySelect (e, cityId) { $(’#’ + cityId.replace(/\./g, ’_’))[0].value = $(’#’ + e.target.id).data(’tComboBox’).text(); } </script> </text>); } |