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

В браузере пользователь имеет возможность выбрать файл из своей файловой системы и сохранить его в БД в соответствующем поле объекта данных, на которое установлен биндинг.

Выглядит контрол следующим образом:

Вначале указывается наименование текущего сохраненного или выбранного файла.Далее идут кнопки:

  • Выбрать файл - открыть диалог для выбора файла,
  • Скачать файл - скачать текущий сохраненный файл из БД,
  • Сбросить файл - сбросить сохраненный или только что выбранный файл.

Кнопка Скачать файл будет недоступна, если файл отсутствует в БД (т.е. соответствующее поле объекта данных равно null).

Кнопка Сбросить файл сбрасывает текущий выбор, после чего в компоненте отобразится надпись “(нет файла)”. При сохранении формы редактирования старый файл в БД будет удален, на его место запишется значение null.

Компонент поддерживается в AjaxGroupEdit.

Ограничение на размер загружаемого файла

По умолчанию ограничение берется из опции maxRequestLength в файле конфигурации приложения (web.config). Значение данного атрибута по умолчанию - 4 МБ, если он отсутствует в файле конфигурации. Данное ограничение может быть переопределено в свойстве FileControl.MaxValueSize. Новое значение не может быть меньше 1 и больше maxRequestLength, в противном случае возникнет исключение.

Если пользователь выберет файл, размер которого превышает заданное ограничение, то он получит сообщение о превышении допустимого размера файла, после чего выбранный файл будет сброшен:

.

Подключение 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 на формах редактирования описано в соответствующей статье.