Почему элемент управления FileUpload привязывается к текущему элементу списка в пользовательском списке EditForm?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/37529

Вопрос

Я написал специальную форму редактирования для списка, что означает, что я теряю некоторые встроенные возможности, такие как вложения, поскольку они были частью стандартной формы.Способ реализации формы заключается в написании пользовательской визуальной веб-части с использованием кода ASP.NET и C#, а затем во время развертывания я скрываю существующую веб-часть редактирования на странице EditForm.aspx, а затем добавляю к ней свою веб-часть.

Я разработал форму с правильным разделением задач: моя форма действительно ничего не знает о SharePoint и просто передает объект данных объекту диспетчера данных, который затем записывает данные в SharePoint.

Проблема связана с формой вложений, которую я написал.Я обнаружил, что SPContext.Current.ListItem.Attachments сразу содержит файл в FileUpload контроль при отправке обратно.Для этого мне не пришлось писать какой-либо код — просто запустите обратную передачу, пока файл выбран в элементе управления.

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

Я также обнаружил, что существует AttachmentsControl в SPContext.Current.FormContext.FieldControlCollection и удалив это в каждом Page_Init событие UserControl вообще не помогает решить проблему.

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top