在运行时渲染自定义表单/更改现有渲染模板

时间:2010-03-19 12:09:31

标签: asp.net sharepoint forms sharepoint-2007 wss-3.0

如何创建可重复使用的自定义新项目表格+最好,我不想将此表单与内容类型绑定?我想强制渲染一个隐藏字段(它可以在页面上渲染,但在页面上显示不可见或渲染并显示)并以编程方式设置字段值(这就是为什么必须渲染它 - 设置它的值)。

Google提供了大量关于如何使用sharepoint设计器创建自定义列表表单的信息,但就我而言,我不希望sharepoint designer获得您在下面看到的优势。

我想要实现的目标

我希望能够创建一个自定义的newform来创建项目(我不希望它是默认的)。要打开这个newForm,我会在item的ECB菜单中使用CustomAction。在这种形式中,我想强制渲染一个隐藏字段并以编程方式设置它的值。

我想从CustomAction ECB(项目的上下文菜单)打开此表单,所以我不想将其设置为内容类型的默认新表单模板。

<XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
      <FormTemplates xmlns="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
        <New>ListForm</New>
      </FormTemplates>
    </XmlDocument>

想法#1

我可以创建自定义RenderingTemplate并将Content type的新表单模板设置为我新创建的模板。

例如,OOTB ListForm呈现模板:

<SharePoint:RenderingTemplate ID="ListForm" runat="server">
    <Template>
        <SPAN id='part1'>
            <SharePoint:InformationBar runat="server"/>
            <wssuc:ToolBar CssClass="ms-formtoolbar" id="toolBarTbltop" RightButtonSeparator="&nbsp;" runat="server">
                    <Template_RightButtons>
                        <SharePoint:NextPageButton runat="server"/>
                        <SharePoint:SaveButton runat="server"/>
                        <SharePoint:GoBackButton runat="server"/>
                    </Template_RightButtons>
            </wssuc:ToolBar>
            <SharePoint:FormToolBar runat="server"/>
            <TABLE class="ms-formtable" style="margin-top: 8px;" border=0 cellpadding=0 cellspacing=0 width=100%>
            <SharePoint:ChangeContentType runat="server"/>
            <SharePoint:FolderFormFields runat="server"/>
            <SharePoint:ListFieldIterator runat="server" />
            <SharePoint:ApprovalStatus runat="server"/>
            <SharePoint:FormComponent TemplateName="AttachmentRows" runat="server"/>
            </TABLE>
            <table cellpadding=0 cellspacing=0 width=100%><tr><td class="ms-formline"><IMG SRC="/_layouts/images/blank.gif" width=1 height=1 alt=""></td></tr></table>
            <TABLE cellpadding=0 cellspacing=0 width=100% style="padding-top: 7px"><tr><td width=100%>
            <SharePoint:ItemHiddenVersion runat="server"/>
            <SharePoint:ParentInformationField runat="server"/>
            <SharePoint:InitContentType runat="server"/>
            <wssuc:ToolBar CssClass="ms-formtoolbar" id="toolBarTbl" RightButtonSeparator="&nbsp;" runat="server">
                    <Template_Buttons>
                        <SharePoint:CreatedModifiedInfo runat="server"/>
                    </Template_Buttons>
                    <Template_RightButtons>
                        <SharePoint:SaveButton runat="server"/>
                        <SharePoint:GoBackButton runat="server"/>
                    </Template_RightButtons>
            </wssuc:ToolBar>
            </td></tr></TABLE>
        </SPAN>
        <SharePoint:AttachmentUpload runat="server"/>
    </Template>
</SharePoint:RenderingTemplate>

我只需要这么小的改动(将内置ListFieldIterator改为自定义ListFieldIterator):

<SharePoint:RenderingTemplate ID="NewRelatedListItemTemplate" runat="server">
...
  <Balticovo:ListFieldIteratorExtended IncludeFields="RelatedItems" runat="server"/>
...
</SharePoint:RenderingTemplate>

优于手动(SPD)自定义表单

  • 这样,形式不是“恒定/静态”。如果之后将新列表字段添加到列表或内容类型,我的自定义表单将呈现它们(ListFieldIterator将执行此操作)。

想法#2

我可以在运行时修改现有的RenderingTemplate吗?

  1. 我会选择“新表格”模板 (例如,命名为ListForm或它 可能不是默认的 ListForm)用 SPControlTemplateManager.GetTemplateByName("ListForm")
  2. 查找ListIterator控件并添加 属性 TemplateName="ListItemFormFieldsWithRelatedItems"
  3. 渲染此模板并将其返回?
  4. 简而言之,我想在运行时以编程方式创建RenderingTemplate,然后使用此模板呈现列表的新表单。

    优点

    • 我获得了Idea 1 +
    • 的优势
    • 这样我即使模板更改(从ListForm到CompanyCustomListForm)也会获得奖励,如果我选择稍后更改内容类型的渲染模板,我的自定义表单将不会失去我实现的功能(我可以创建其他功能而不是尝试rembeer重新实现这些特定的东西或其他第三方功能,如果他们使用自定义表单,将不会覆盖我的功能 - 松耦合是吗?)。

    现在,这是(想法#2)可能......?

0 个答案:

没有答案