Выбор значения из справочника (пример при вводе адреса сделать выбор города из списка справочника городов)

Пример:
Нужно при вводе адреса в модуле CRM сделать выбор города из списка справочника городов
 
  1. Создать справочник городов в дизайнере (или использовать существующий, если есть).
  2. Копируем файл представления из 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 (редактировать этот новый файл).
  3. Изменить код файла на следующий:
 
В начале файла
@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>);
}

Прикрепленные файлы