FormField игнорирует формулу проверки столбца
В SP 2010 есть эта замечательная новая функция, где вы можете указать пользовательскую формулу проверки и сообщение об ошибке для любого столбца.
По какой-то причине это не работает, когда вы заменяете NewForm.aspx по умолчанию для списка пользовательской формой, используя конструктор SharePoint "Создать новую форму списка -> Новая форма элемента". Он создает aspx, где он помещает элемент управления FormField для каждого поля выбранного типа контента вместо ListFormWebpart, который выполняет итерацию и рендеринг каждого поля без полей, явно упомянутых на странице.
Код для каждого поля в только что созданной пользовательской форме похож на следующий (только для иллюстрации)
<tr>
<td width="190px" valign="top" class="ms-formlabel">
<H3 class="ms-standardheader">
<nobr>PhoneNumber</nobr></H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
<SharePoint:FormField runat="server" id="ff4{$Pos}" ControlMode="New" FieldName="PhoneNumber" __designer:bind="{ddwrt:DataBind('i',concat('ff4',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@PhoneNumber')}"/>
<SharePoint:FieldDescription runat="server" id="ff4description{$Pos}" FieldName="PhoneNumber" ControlMode="New"/>
</td>
</tr>
Проблема заключается в том, что с формой "Создать новую форму списка -> Форма нового элемента" проверка формулы (новой sharepoint 2010) не работает: она проходит проверку формы только при сбое на этапе сохранения, что приводит к появлению страницы ошибки.
Настраивается ли это каким-либо образом с помощью элемента управления FormField, или я могу каким-либо иным образом воспользоваться преимуществом этого нового механизма проверки sp2010 при использовании пользовательских (не ListFormWebpart) страниц элементов или мне нужно написать собственную проверку GUI в этом случае?
Спасибо!
1 ответ
Проблема не в самом элементе управления FormField, а в веб-части DataFormWebPart, в которой я использовал эти поля. Есть 2 проблемы:
- С неуверенностью поле выдает исключение, которое должно правильно обрабатываться WebPart, показывая сообщение о том, что элемент с таким значением поля уже существует. Но DataFormWebPart не обрабатывает это исключение, в отличие от ListFormWebPart по умолчанию. Это похоже на формулу пользовательской проверки.
- Средства управления полями SharePoint реализуют интерфейс IValidator, так что веб-часть-владелец может проверять их и отображать соответствующие сообщения (например, для обязательных полей поиска), но DataFormWebPart этого не делает (ListFormWebPart делает)