Это контрол для работы с типом данных ICSSoft.STORMNET.FileType.File в веб-приложении. Файлы сохраняются в БД в виде сериализованной
строки, поэтому данный контрол предназначен для работы с небольшими файлами.
В браузере пользователь имеет возможность выбрать файл из своей файловой системы и сохранить его в БД в соответствующем поле объекта данных, на которое установлен биндинг.
Выглядит контрол следующим образом:

Вначале указывается наименование текущего сохраненного или выбранного файла.Далее идут кнопки:
- Выбрать файл - открыть диалог для выбора файла,
- Скачать файл - скачать текущий сохраненный файл из БД,
- Сбросить файл - сбросить сохраненный или только что выбранный файл.
Кнопка Скачать файл будет недоступна, если файл отсутствует в БД (т.е. соответствующее поле объекта данных равно null).
Сбросить файл, кнопка Скачать файл будет скачивать старый файл (из БД) до тех пор, пока не будет сохранен объект данных (форма редактирования).Кнопка Сбросить файл сбрасывает текущий выбор, после чего в компоненте отобразится надпись “(нет файла)”. При сохранении формы редактирования старый файл в БД будет удален, на его место запишется значение null.
Компонент поддерживается в AjaxGroupEdit.
Ограничение на размер загружаемого файла
По умолчанию ограничение берется из опции maxRequestLength в файле конфигурации приложения (web.config). Значение данного атрибута по умолчанию - 4 МБ, если он отсутствует в файле конфигурации.
Данное ограничение может быть переопределено в свойстве FileControl.MaxValueSize. Новое значение не может быть меньше 1 и больше maxRequestLength, в противном случае возникнет исключение.
Если пользователь выберет файл, размер которого превышает заданное ограничение, то он получит сообщение о превышении допустимого размера файла, после чего выбранный файл будет сброшен:
.
maxRequestLength. Такая ситуация не контролируется компонентом FileControl.Подключение FileControl (Web) к приложению
Для того, чтобы FileControl появился на форме редактирования, нужно его добавить в aspx-разметку.
<ac:FileControl ID="ctrlFile" runat="server"/>
Контрол располагается в сборке ICSSoft.STORMNET.Web.AjaxControls.dll.
Для добавления в контролы, которые формируются динамически (например, AjaxGroupEdit), нужно прописать в WebControlProvider следующие строки:
<?xml version="1.0" encoding="utf-8" ?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="WebControlProvider.xsd">
<!-- ... -->
<propertytype name="File">
<control typename="ICSSoft.STORMNET.Web.AjaxControls.FileControlView, ICSSoft.STORMNET.Web.AjaxControls" property="Value" codefile=""/>
<editcontrol typename="ICSSoft.STORMNET.Web.AjaxControls.FileControl, ICSSoft.STORMNET.Web.AjaxControls" property="Value" codefile=""/>
</propertytype>
<!-- ... -->
</root>
Также необходимо в web.config добавить следующие строки:
<configuration>
<!-- ... -->
<system.web>
<!-- ... -->
<httpHandlers>
<!-- ... -->
<add verb="POST" path="FileControlService.axd" type="ICSSoft.STORMNET.Web.HttpHandlers.FileControlHandler" validate="false" />
<!-- ... -->
</httpHandlers>
<!-- ... -->
</system.web>
<system.webServer>
<!-- ... -->
<handlers>
<!-- ... -->
<add verb="POST" name="FileControlService" path="FileControlService.axd" type="ICSSoft.STORMNET.Web.HttpHandlers.FileControlHandler" resourceType="Unspecified" preCondition="integratedMode" />
<!-- ... -->
</handlers>
<!-- ... -->
</system.webServer>
</configuration>
Для сгенерированных “начисто” проектов данные настройки создаются автоматически.
FileControl в WOLV
Контрол можно расположить в ячейках столбца WOLV в режиме ReadOnly (только возможность скачивания файла).
Необходимо указать, что для отображения типа File нужно использовать FileControl:
<customproperty class="BugReport" property="Attachment">
<control typename="ICSSoft.STORMNET.Web.AjaxControls.FileControl, ICSSoft.STORMNET.Web.AjaxControls" property="Value" codefile=""/>
</customproperty>
В WOLVSettApplyer.cs необходимо подписаться на событие WebControlProvider.TuneControlDelegateMethod, чтобы настроить свойство FileControl.ReadOnly = true для всех контролов FileControl, расположенных в WOLV:
wolv.WebControlProvider.TuneControlDelegateMethod += TuneControlDelegateMethod;
/// <summary>
/// Донастройка контролов в WOLV.
/// </summary>
/// <param name="control">Созданный контрол в WOLV.</param>
/// <param name="createdControlData">Информация о созданном контроле.</param>
private void TuneControlDelegateMethod(Control control, CreatedControlData createdControlData)
{
// FileControl в WOLV должен быть в режиме "Только для чтения".
var fileControl = control as FileControl;
if (fileControl != null)
{
fileControl.ReadOnly = true;
fileControl.EmptyFileNameText = string.Empty;
}
}
Использование FileControl на формах редактирования
Использование FileControl на формах редактирования описано в соответствующей статье.