[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>);
}