Я не уверен, является ли ответ на мой собственный вопрос правильным этикетом или нет, но я нашел, что мой ответ ... оказывается намного проще, чем я думал.
Когда я читал ответ Брайана, мне пришло в голову, что редактирование поста изменяет строку запроса. Там указан идентификатор, конечно. Поэтому я начал искать лучший способ разбора строки запроса. Вот тогда я понял, что это уже сделано для меня в привязке параметров:
<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) и показываю различные элементы управления.
Я немного опробовал это сегодня днем, и пока он отлично работает.