繁体   English   中英

SharePoint 2007 列表中自定义 NewForm.aspx 和 EditForm.aspx 之间的差异

[英]Differences between a custom NewForm.aspx and EditForm.aspx in a SharePoint 2007 List

我正在处理一个包含自定义 NewForm.aspx 和自定义 EditForm.aspx 的列表,我将它们称为 New.aspx 和 Edit.aspx。 我远非 SharePoint 专家,但看起来这两个文件之间的唯一区别是在整个文件中设置的其他 ControlMode 属性。

ControlMode="New" 用于 New.aspx 和 ControlMode="Edit" 用于 Edit.aspx

作为测试,我从我的 New.aspx 中获取代码并将其复制到我的 Edit.aspx 中,并将 ControlMode 属性更改为“编辑”。 一切似乎都运行良好。 所以我想做的只是使用一个文件而不是一个单独的文件来新建和编辑。 我不确定这是否可能,但我采取的第一步是创建一个 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>

此时我的表单仍然可以正常工作,但它仍然是两个不同的文件。 所以问题是,有谁知道我可以动态填充 xsl:variable 的方法,以便我可以只为新模式和编辑模式指定一个文件?

提前致谢!

我不确定回答我自己的问题是否是正确的礼仪,但我发现我的答案......结果比我想象的要简单得多。

在阅读 Brian 的回复时,我突然想到编辑帖子会更改查询字符串。 当然有指定的ID。 所以我开始寻找解析查询字符串的最佳方法。 那时我意识到这已经在 ParameterBindings 中为我完成了:

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

但是 xsl:param 标记没有被指定,所以我将它添加到我的 xsl:stylesheet 的顶部:

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

然后,我现在可以直接针对 ListItemID 进行测试,而不是使用我在原始帖子中创建的 ControlMode 变量:

<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 中指定的默认值)并显示不同的控件。

今天下午我已经对此进行了一些测试,到目前为止它运行良好。

内置的 sharepoint 控件将根据定义的控制模式尝试不同的 function。 显然,如果它是编辑的,那么它不仅会尝试渲染控件,还会尝试使用当前值填充该控件。 如果模式是新的,它将简单地呈现没有预定义值的控件。 它还有很多内容,但这是高级概述。

如果您使用自定义的新表单和编辑表单,我个人会出于组织目的将它们分开。 一个简单的解决方案是在每个页面表单中定义变量后使用 XSL 包含。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM