Различия между настраиваемым NewForm.aspx и EditForm.aspx в списке SharePoint 2007 - PullRequest
1 голос
/ 27 апреля 2011

Я работаю в списке с пользовательским NewForm.aspx и пользовательским EditForm.aspx, которые я назвал New.aspx и Edit.aspx.Я далеко не эксперт по SharePoint, но похоже, что единственными различиями между этими двумя файлами являются разные атрибуты ControlMode, установленные во всем файле.

ControlMode = "New" для New.aspx и ControlMode = "Edit" для Edit.aspx

В качестве теста я взял код из своего New.aspx и скопировал его в свой Edit.aspx и просто изменил атрибуты ControlMode на «Редактировать».Кажется, все работает нормально.Так что я хотел бы просто использовать один файл вместо отдельного для New и Edit.Я не уверен, что это возможно, но первый шаг, который я сделал, - это создать переменную XSL:

<xsl:variable name="ControlMode" select="'Edit'" />

Затем я могу сделать что-то вроде этого:

<xsl:choose>
  <xsl:when test="$ControlMode = 'New'">
    <SharePoint:AttachmentUpload runat="server" ControlMode="New"/>
    <SharePoint:ItemHiddenVersion runat="server" ControlMode="New"/>
  </xsl:when>
  <xsl:when test="$ControlMode = 'Edit'">
    <SharePoint:AttachmentUpload runat="server" ControlMode="Edit"/>
    <SharePoint:ItemHiddenVersion runat="server" ControlMode="Edit"/>
  </xsl:when>
</xsl:choose>

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

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

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

Когда я читал ответ Брайана, мне пришло в голову, что редактирование поста изменяет строку запроса. Там указан идентификатор, конечно. Поэтому я начал искать лучший способ разбора строки запроса. Вот тогда я понял, что это уже сделано для меня в привязке параметров:

<ParameterBinding Name="ListItemId" Location="QueryString(ID)" DefaultValue="0"/>

Однако тег xsl: param не был указан, поэтому я добавил его в начало таблицы xsl: stylesheet:

<xsl:param name="ListItemId"></xsl:param>

Затем, вместо того, чтобы использовать переменную ControlMode, которую я создал в своем исходном сообщении, теперь я могу напрямую проверять ListItemID:

<xsl:choose>
  <xsl:when test="$ListItemId = '0' or not($ListItemId)">
    <SharePoint:AttachmentUpload runat="server" ControlMode="New"/>
    <SharePoint:ItemHiddenVersion runat="server" ControlMode="New"/>
  </xsl:when>
  <xsl:otherwise>
    <SharePoint:AttachmentUpload runat="server" ControlMode="Edit"/>
    <SharePoint:ItemHiddenVersion runat="server" ControlMode="Edit"/>
  </xsl:otherwise>
</xsl:choose>

По сути, я просто проверяю значение 0 (значение по умолчанию указано в ParameterBinding) и показываю различные элементы управления.

Я немного опробовал это сегодня днем, и пока он отлично работает.

0 голосов
/ 27 апреля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...