[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 (редактировать этот новый файл).
- Изменить код файла на следующий:
В начале файла
@using EleWise.ELMA.Web.Mvc.Models.Boxes @{ // UID справочника var cityCatalogUid = "00da4d30-3091-4f5f-b6ce-9747a6113827"; }
Заменяем старое поле для ввода города (@Html.EditableProperty(m => m.City)) на код ниже
@{ // Установим текущее значение var selectedItems = Model != null && !string.IsNullOrEmpty( Model.City ) ? new List <AutocompleteItem> { new AutocompleteItem { Text = Model.City.ToString(), Value = "" } } : new List<AutocompleteItem>(); }
@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)
@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}’.
Скрипт, который будет записывать выбранное значение в скрытое поле модели:
@{ 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>); }