1

我正在尝试将 AllItems.aspx 页面上的超链接更改为指向名为 CustomUpload.aspx 的文档库的自定义上传页面。

假设我有两个文档库(列表)。一个称为vsList,在 Visual Studio 中创建并作为 SharePoint 解决方案的一部分部署,另一个称为sdList,从浏览器创建通常的方式。

这是我迄今为止能够成功完成的事情:

  1. 在基于 Web 的编辑器中编辑sdList的 AllItems.aspx 页面。通过将其工具栏类型设置为“摘要”来自定义包含“添加新项目”超链接的 XsltListViewWebPart。然后,使用 SharePoint Designer (SPD),我在设计器视图中单击“添加新项目”超链接,然后出现向右的小箭头,允许我编辑超链接选项(即,将值设置为我自己的自定义 URL)。
  2. 将上面的 XSL 代码复制并粘贴到vsList文档库的 AllItems.aspx 文件中,并确保 url 的路径是正确的,因为 SharePoint 永远找不到任何东西,因为映射目录和虚拟目录“是“共享点。

选项 #1 不是真正的解决方案,因为它仅适用于通过 SP 门户中基于 Web 的 GUI 编辑器直接创建的文档库。我需要在我在 VS 中创建的列表定义中定义所有这些。至于选项#2,问题几乎相同。如果我将自定义 XSL 复制并粘贴到 AllItems.aspx 页面中,那么每次我重新部署包含自定义列表定义的 VS 解决方案时,它将被覆盖。所以我真的需要一个解决方案,允许我在我的 VS 列表定义中定义自定义 URL。

这是应该工作的 - 但不是:

  1. 创建一个自定义 Xsl 文件,其中包含覆盖默认“添加新项目”链接所需的所有调整。使用 Site Action => Edit Page => Edit Web Part => Miscellaneous => XSL Link 编辑sdList文档库的 AllItems.aspx 页面中 XsltListViewWebPart 的 XslLink 属性。
  2. 编辑列表定义的 Elements.xml 文件,添加必要的 Module 和 File XML 标记以指向将覆盖“Add new item” URL 的自定义 XSL 文件。无论我做什么,当我添加标签时它都不会部署,因为它只是找不到自定义 XSL 文件。

我已经尝试将文件放在 100 个不同的位置,并且它一直试图在“Features[MY PROJECT NAME]_PrimaryFeature\CustomStyle.xsl”中查找它。它从哪里得到我将文件存储在该路径/位置的想法?即使我尝试将 XSL 文件存储在 SharePoint 映射的 LAYOUTS/XSL 目录或实际 SharePoint 网站的样式库文档库中,它仍然找不到它。这简直令人抓狂。路径、位置、目录结构和 XSL 已成为我尝试在 SharePoint 中完成任何事情的最大障碍。

请帮忙。

4

1 回答 1

1

所以这就是我最终做的......

我在最初的尝试中基本上执行了上面的步骤 1 和 2,并将整个站点模板导出到我工作站上的本地文件中。然后,我在 Visual Studio 中创建了一个新的 SharePoint 项目/解决方案(以免弄乱我现有的项目),选择从现有网站模板导入数据并仅选择sdList以导入我的新解决方案。

导入过程完成后,我可以查看为 AllItem.aspx 生成的源代码(其中包含我使用 SPD 手动更新的 XSL 代码),然后将该代码复制到 Schema.xml 文件中vsList在我现有的 SharePoint 解决方案中。

在 Schema.xml 文件的 View 部分中,我在 BaseViewID #1 的标记之后添加了标记(即 AllItems.aspx 视图)并将代码粘贴在那里。

在理想情况下,我宁愿将所有 Xsl 代码转储到外部文件中,然后只使用标签,但我无法让它工作。由于某种原因,SharePoint 无法找到该文件。这是我对 SharePoint 的不满之一(如我原来的帖子中所述):文件夹映射和文件位置。不必要的混乱。

对于那些感兴趣的人,这里是自定义 Xsl 的样子。查找带有“CustomUpload.aspx”的行以及紧接在它之前和之后的行。不幸的是,我无法在此编辑器中加粗或突出显示代码部分,因此您必须自己进行一些调查。

    <Xsl>
          <![CDATA[
              <xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" version="1.0" exclude-result-prefixes="xsl msxsl ddwrt" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:ddwrt2="urn:frontpage:internal" xmlns:o="urn:schemas-microsoft-com:office:office"> 
  <xsl:include href="/_layouts/xsl/main.xsl"/> 
  <xsl:include href="/_layouts/xsl/internal.xsl"/> 
            <xsl:param name="AllRows" select="/dsQueryResponse/Rows/Row[$EntityName = '' or (position() &gt;= $FirstRow and position() &lt;= $LastRow)]"/>
            <xsl:param name="dvt_apos">&apos;</xsl:param>
            <xsl:template name="Freeform" ddwrt:ghost="" xmlns:ddwrt2="urn:frontpage:internal">
                <xsl:param name="AddNewText"/>
                <xsl:param name="ID"/>
                <xsl:variable name="Url">
                    <xsl:choose>
                        <xsl:when test="List/@TemplateType='119'"><xsl:value-of select="$HttpVDir"/>/_layouts/CreateWebPage.aspx?List=<xsl:value-of select="$List"/>&amp;RootFolder=<xsl:value-of select="$XmlDefinition/List/@RootFolder"/></xsl:when>
                        <xsl:when test="$IsDocLib"><xsl:value-of select="$HttpVDir"/>/_layouts/Upload.aspx?List=<xsl:value-of select="$List"/>&amp;RootFolder=<xsl:value-of select="$XmlDefinition/List/@RootFolder"/></xsl:when>
                        <xsl:otherwise><xsl:value-of select="$ENCODED_FORM_NEW"/></xsl:otherwise>
                    </xsl:choose>
    </xsl:variable>
                <xsl:variable name="HeroStyle">
                    <xsl:choose>
                        <xsl:when test="Toolbar[@Type='Standard']">display:none</xsl:when>
                        <xsl:otherwise></xsl:otherwise>
                    </xsl:choose>
    </xsl:variable>
                <xsl:if test="$ListRight_AddListItems = '1' and (not($InlineEdit) or $IsDocLib)">
      <table id="Hero-{$WPQ}" width="100%" cellpadding="0" cellspacing="0" border="0" style="{$HeroStyle}">
        <tr>
          <td colspan="2" class="ms-partline">
            <img src="/_layouts/images/blank.gif" width="1" height="1" alt="" />
          </td>          
        </tr>
        <tr>
          <td class="ms-addnew" style="padding-bottom: 3px">
          <span style="height:10px;width:10px;position:relative;display:inline-block;overflow:hidden;" class="s4-clust"><img src="/_layouts/images/fgimg.png" alt="" style="left:-0px !important;top:-128px !important;position:absolute;"  /></span>
            <xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes">&amp;nbsp;</xsl:text>
            <xsl:choose>
                <xsl:when test="List/@TemplateType = '115'">
              <a class="ms-addnew" id="{$ID}-{$WPQ}"
                 href="{$Url}"
                 onclick="javascript:NewItem2(event, &quot;{$Url}&quot;);javascript:return false;"
                 target="_self">
                <xsl:value-of select="$AddNewText" />
              </a>
            </xsl:when>
                <xsl:otherwise>
                       <xsl:variable name="CustomUrl">
                          ../../../_layouts/MyControls/CustomUpload.aspx?List=<xsl:value-of select="$List"/>
                       </xsl:variable>
                       <a href="{$CustomUrl}"><xsl:value-of select="$AddNewText" /></a>
                    </xsl:otherwise>
            </xsl:choose>
          </td>
        </tr>
        <tr>
          <td>
            <img src="/_layouts/images/blank.gif" width="1" height="5" alt="" />
          </td>
        </tr>
      </table>
                    <xsl:choose>
                        <xsl:when test="Toolbar[@Type='Standard']">
          <script type='text/javascript'>
            if (typeof(heroButtonWebPart<xsl:value-of select="$WPQ"/>) != &quot;undefined&quot;)
            {
                <xsl:value-of select="concat('  var eleHero = document.getElementById(&quot;Hero-', $WPQ, '&quot;);')"/>
                if (eleHero != null)
                    eleHero.style.display = &quot;&quot;;
            }
          </script>
        </xsl:when>
                        <xsl:otherwise>
        </xsl:otherwise>
                    </xsl:choose>
                    <xsl:if test="List/@TemplateType = '115'">
          <script type='text/javascript'>
            if (typeof(DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>) != &quot;undefined&quot;)
            {
                <xsl:value-of select="concat('  var eleLink = document.getElementById(&quot;', $ID, '-', $WPQ, '&quot;);')"/>
                if (eleLink != null)
                {
                    DefaultNewButtonWebPart<xsl:value-of select="$WPQ"/>(eleLink);
                }
            }
          </script>
      </xsl:if>
    </xsl:if>
  </xsl:template></xsl:stylesheet>
              ]]>
        </Xsl>

无论如何,我希望这可以帮助某人。

于 2013-04-19T15:06:14.317 回答