Как добавить новое поле в пользовательский список (см. правка!)
-
16-10-2019 - |
Вопрос
Я использую шаблон Microsoft для добавления тренингов и курсов, на которые люди должны зарегистрироваться.Все работает нормально, но я хочу добавить поле в список Курсов.Я хочу добавить поле, указывающее, для какого типа персонала предназначен этот курс, например, для отдела кадров, охраны труда, администратора и т.д.
Итак, я повсюду искал ответы на этот вопрос, документация по SharePoint шокирует, и я сделал следующее:
- Настройки > Создать столбец на странице Курсов.
- Ввел все необходимые данные
- В DispForm добавлены EditForm и NewForm (.aspx)
@fStaffType, Staff Type;
ДляDataFields
Раздел.(Staff Type
это название поля`) В DispForm добавлена новая строка для отображения данных:
<tr> <td width="190px" valign="top" class="ms-formlabel"> <H3 class="ms-standardheader"> <nobr>Staff Type</nobr> </H3> </td> <td width="400px" valign="top" class="ms-formbody"> <xsl:value-of select="@fStaffType"/> </td> </tr>
В EditForm и NewForm добавлена новая строка для редактирования / ввода данных:
<tr> <td width="190px" valign="top" class="ms-formlabel"> <H3 class="ms-standardheader"> <nobr>Staff Type</nobr> </H3> </td> <td width="400px" valign="top" class="ms-formbody"> <SharePoint:FormField runat="server" id="ff12{$Pos}" ControlMode="New" FieldName="fStaffType" __designer:bind="{ddwrt:DataBind('i',concat('ff12',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@fStaffType')}"/> <SharePoint:FieldDescription runat="server" id="ff12description{$Pos}" FieldName="fStaffType" ControlMode="New"/> </td> </tr>
В EditForm и NewForm я получаю сообщение об ошибке:
Управление отображением ошибок - ff12description_1
Возникло необработанное исключение.Ссылка на объект не установлена на экземпляр объекта.
Если я закомментирую описание, оно покажет первое td
(Имя поля), но второй td
это просто пустота.
Мы были бы очень признательны за любую помощь!
Редактировать:Связанная с этим проблема, не знаю, должен ли я создать новый вопрос или нет.Но Марк Д. Андерсон ответил ниже, и я смог добавить и отобразить новое поле.Тем не менее, я прекрасно могу добавить новый курс, но если я отредактирую его и изменю поле Тип персонала, новый курс будет создан в текущий день и время.Но если другие поля редактируются, они редактируются правильно.
Есть какие-нибудь идеи?
Решение
Многие из Шаблоны "Сказочные 40" имейте индивидуальные формы.(Вероятно, на этом этапе вы будете спорить о сказочной части названия.)
Похоже, что вы делаете примерно правильные вещи в формах, но немного сложно сказать, к чему это приведет.
Когда вы создавали новый столбец, вы дали ему имя "fStaffType"?Если нет, то в этом-то и проблема.Если вы назвали его "Staff Type", то внутренним именем (или StaticName) столбца будет "Staff_x0020_Type".(Пробел в имени будет закодирован.) Редактировать:Вы можете найти StaticName для столбца, зайдя в настройки списка и отредактировав этот столбец.StaticName будет находиться в конце URL-адреса в качестве параметра строки запроса.В зависимости от того, какие символы вы использовали, они могут быть закодированы двояко, например Staff%5Fx0020%5FType .
Вам не нужно добавлять столбцы DisplayName и StaticName в раздел DiataFields - честно говоря, это не служит какой-либо очевидной цели.Вам просто нужно убедиться, что имя столбца в SharePoint:FormField и SharePoint:FieldDescription совпадает с именем StaticName для добавленного вами имени столбца.
Завершающий символ "_1" в ошибке является частью уникального имени, которое SharePoint присваивает каждому экземпляру этого столбца на странице (возможно, вы разрешаете редактировать несколько элементов в одной форме), добавляя значение переменной $ Pos.
Другие советы
Похоже, что ff12 уже определен где-то еще на странице, и, вероятно, он переписывается с _1 в конце.
- Можете ли вы просто попробовать перетащить поле из источника данных и позволить разработчику самому определить названия полей?
или
- Можете ли вы попробовать добавить "Пользовательскую форму редактирования" на другую страницу, а затем скопировать описание поля?
Возможно, я не читал или плохо понял ваши потребности.Почему бы не реализовать Content Type?У вас могла бы быть функция для ваших пользовательских полей (она же столбцы) и установить атрибут типа diplay в edit form = true, show в view = true (и т.д.)