2013-03-01 7 views
2

Разрабатывает модуль для DotNetNuke 7. Я хочу иметь возможность загружать миниатюру для записей в каталоге. Сумел контроль места в режиме редактирования моего модуля и загрузить и однако выбрать файлы, когда я создаю проект, я получаю следующее сообщение об ошибке:dnn filepickeruploader control

C:\dnn\dotnetnuke\DesktopModules\EventCatalog\Edit.ascx.designer.cs(103,38,103,41): error CS0234: The type or namespace name 'Web' does not exist in the namespace 'DotNetNuke' (are you missing an assembly reference?)

Кроме того, я не могу понять, как получить выбранный файл на внутреннем интерфейсе для сохранения URL-адреса в базе данных. Когда я вводю идентификатор элемента управления VS, он распознает его, но intellisense не предоставляет никаких подсказок в качестве возможных вариантов.

Может кто-нибудь сказать мне, как исправить вышеуказанную ошибку, а также, если возможно, указать мне на обзор/учебник для этого элемента управления. Сделали довольно много Googling, но ничего не нашли.

ответ

1

Ну, для начала вам, вероятно, необходимо добавить ссылку на сборку DotNetNuke.Web в свой проект. Как только это произойдет, это, вероятно, поможет и вашему недостатку intellisense.

Похоже, что основной способ взаимодействия с выбранным URL-адресом - через свойство FileID. Сам элемент управления будет управлять сохранением файла для выбранного FolderPath (который может или не может быть чем-то, что пользователь может изменить).

Но вы правы, у вас нет хороших ресурсов для использования элемента управления. Лучший «учебник», вероятно, просматривает основной код DotNetNuke, чтобы увидеть, как ядро ​​использует элемент управления.

+0

Спасибо, необходимо добавить узел DotNetNuke.Web, затем включить его в код. Intellisense тогда в значительной степени ведет вас через остальное. – HuwD

0

Встроенный элемент управления загрузкой dnn специально предназначен для загрузки файлов в файловую систему dnn, но, честно говоря, его довольно уродливо работать.

Он делает много предположений о том, что вы хотите сделать с файлом, и как часть его процесса автоматически регистрирует новый файл в индексе файловой системы dnn.

Его также не идеально подходит для загрузки миниатюр или любых подобных причудливых вещей - поскольку у него нет возможности для управления размером или масштабирования размера файла и его обрезки - это то, что было обещано пару раз, но не было на данный момент.

В дополнение к этому у него есть немного собственного ума, когда дело доходит до того, где он фактически хранит загруженный файл - это означает, что вам может быть лучше смотреть на сторонний загрузчик, которым вы можете управлять более легко.

FWIW - существует полная версия библиотеки загрузки aserik asyn, установленной с каждой установкой dnn - вам нужно будет настроить ее вручную, но это не так сложно.

<dnn:DnnAsyncUpload></dnn:DnnAsyncUpload> является разметка основной структуры и ее функционально эквивалентны <telerik:RadAsyncUpload></telerik:RadAsyncUpload>

документированной здесь http://www.telerik.com/help/aspnet-ajax/asyncupload-overview.html

Сказав все это, если вы хотите придерживаться подборщика DNN файла - этот код позволит вам найти файл, который dnn также загрузил файл.

String thisURL = ""; 
String thisPHYSICAL = ""; 
Int32 itest001 = thisControl001.FileID; 
if (itest001 > 0) 
{ 
    var thisFILE = (DotNetNuke.Services.FileSystem.FileInfo)FileManager.Instance.GetFile(itest001); 
    thisURL = FileManager.Instance.GetUrl(thisFILE); 
    thisPHYSICAL = thisURL.PhysicalPath; 
} 

thisURL будет содержать URL-адрес относительно вашего веб-сайта thisPHYSICAL будет содержать физическое расположение файла на сервере.