1

我需要为自定义共享点列表创建一个编辑表单,该列表显示/允许编辑/隐藏基于用户配置文件的某些字段。因此,我创建了一个非默认编辑表单,将其 WebPartPages:DataFormWebPart 复制到我正在开发的自定义 Web 部件解决方案中,并将其部署到共享点,并稍作调整(查询字符串参数重命名为 SPID 而不是 ID,因为 Web 部件用于一个页面库并使用 ID 作为参数给了我各种各样的错误)

现在这个程序对于“新表格”工作得很好,将数据保存到下一个屏幕......所有桃色。

我用一个编辑表单尝试了相同的过程,稍微定制了 XSL(没有什么特别的只是样式和 HTML 表改组),令我惊讶的是,当我加载页面时,我可以看到绑定工作正常,并且我的所有字段都有它们的值。但是当我点击保存时,它会进行一些回发,并且所有字段都会重置为空值,并且在检查没有保存任何值之后。

此时,为了隔离问题,我已经删除了所有自定义项,唯一不同于编辑表单页面和我正在使用的自定义 webpart 是 ListItemId 位置,我将查询参数从“ID”更改为“SPID”。

有什么我应该知道的我显然不知道在自定义 Web 部件中运行 WebPartPages:DataFormWebPart 吗?令人费解的是插入表单有效并且编辑表单显示所有值(绑定OK)但没有保存任何内容

当然,错误日志没有我能找到的任何痕迹,也没有 JavaScript 错误(即开发人员工具调试)

任何指针将不胜感激。

PS:Sharepoint 2013 预置。PS2:这是我的 webpart 的标记:

    <WebPartPages:DataFormWebPart runat="server" EnableOriginalValue="False" DisplayName="New Projects" ViewFlag="8" ViewContentTypeId="" Default="FALSE"
                        ListUrl="" ListDisplayName="" ListName="{5A1F5F46-E308-440D-A7CE-3FF0587D9B4B}" ListId="5a1f5f46-e308-440d-a7ce-3ff0587d9b4b" PageType="PAGE_EDITFORM"
                        PageSize="-1" UseSQLDataSourcePaging="True" DataSourceID="" ShowWithSampleData="False" AsyncRefresh="False" ManualRefresh="False" AutoRefresh="False"
                        AutoRefreshInterval="60" NoDefaultStyle="TRUE" InitialAsyncDataFetch="False" Title="New Projects" FrameType="None" SuppressWebPartChrome="False"
                        Description="" IsIncluded="True" PartOrder="2" FrameState="Normal" AllowRemove="True" AllowZoneChange="True" AllowMinimize="True" AllowConnect="True"
                        AllowEdit="True" AllowHide="True" IsVisible="True" DetailLink="" HelpLink="" HelpMode="Modeless" Dir="Default" PartImageSmall=""
                        MissingAssembly="Cannot import this Web Part." PartImageLarge="" IsIncludedFilter="" ExportControlledProperties="True"
                        ConnectionID="00000000-0000-0000-0000-000000000000" ID="Project_DataFormWebPart" ChromeType="None" ExportMode="All" __MarkupType="vsattributemarkup"
                        __WebPartId="{C30D3C9F-ECB9-4334-B442-5244C9837488}" __AllowXSLTEditing="true" WebPart="true" Height="" Width="" >
                        <DataSources>
                            <SharePoint:SPDataSource ID="Project_DataSource" runat="server" DataSourceMode="ListItem"
                                SelectCommand = "&lt;View&gt;&lt;Query&gt;&lt;Where&gt;&lt;And&gt;&lt;Eq&gt;&lt;FieldRef Name=&quot;ContentType&quot;/&gt;&lt;Value Type=&quot;Text&quot;&gt;Item&lt;/Value&gt;&lt;/Eq&gt;&lt;Eq&gt;&lt;FieldRef Name=&quot;ID&quot;/&gt;&lt;Value Type=&quot;Number&quot;&gt;{ListItemId}&lt;/Value&gt;&lt;/Eq&gt;&lt;/And&gt;&lt;/Where&gt;&lt;/Query&gt;&lt;/View&gt;"
                                UseInternalName="True" UseServerDataFormat="True">
                                <SelectParameters>
                                    <WebPartPages:DataFormParameter ParameterKey="ListItemId" PropertyName="ParameterValues" DefaultValue="0" Name="ListItemId"></WebPartPages:DataFormParameter>
                                    <WebPartPages:DataFormParameter ParameterKey="weburl" PropertyName="ParameterValues" DefaultValue="http://jam3iya4" Name="weburl"></WebPartPages:DataFormParameter>
                                    <WebPartPages:DataFormParameter ParameterKey="ListID" PropertyName="ParameterValues" DefaultValue="{5A1F5F46-E308-440D-A7CE-3FF0587D9B4B}" Name="ListID"></WebPartPages:DataFormParameter>
                                </SelectParameters>
                                <UpdateParameters>
                                    <WebPartPages:DataFormParameter ParameterKey="ListItemId" PropertyName="ParameterValues" DefaultValue="0" Name="ListItemId"></WebPartPages:DataFormParameter>
                                    <WebPartPages:DataFormParameter ParameterKey="weburl" PropertyName="ParameterValues" DefaultValue="http://jam3iya4" Name="weburl"></WebPartPages:DataFormParameter>
                                    <WebPartPages:DataFormParameter ParameterKey="ListID" PropertyName="ParameterValues" DefaultValue="{5A1F5F46-E308-440D-A7CE-3FF0587D9B4B}" Name="ListID"></WebPartPages:DataFormParameter>
                                </UpdateParameters>
                            </SharePoint:SPDataSource>
                        </DataSources>
                        <Xsl>
                            <xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:dsp="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">
                                <xsl:output method="html" indent="no"/>
                                <xsl:decimal-format NaN=""/>
                                <xsl:param name="ListItemId"></xsl:param>
                                <xsl:param name="dvt_apos">&apos;</xsl:param>
                                <xsl:param name="ManualRefresh"></xsl:param>
                                <xsl:variable name="dvt_1_automode">0</xsl:variable>
                                <xsl:template match="/" xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:SharePoint="Microsoft.SharePoint.WebControls">
                                    <xsl:choose>
                                        <xsl:when test="($ManualRefresh = 'True')">
                                            <table width="100%" border="0" cellpadding="0" cellspacing="0">
                                                <tr>
                                                    <td valign="top">
                                                        <xsl:call-template name="dvt_1"/>
                                                    </td>
                                                    <td width="1%" class="ms-vb" valign="top">
                                                        <img src="/_layouts/15/images/staticrefresh.gif" id="ManualRefresh" border="0" onclick="javascript: {ddwrt:GenFireServerEvent('__cancel')}" alt="Click here to refresh the dataview."/>
                                                    </td>
                                                </tr>
                                            </table>
                                        </xsl:when>
                                        <xsl:otherwise>
                                            <xsl:call-template name="dvt_1"/>
                                        </xsl:otherwise>
                                    </xsl:choose>
                                </xsl:template>
                                <xsl:template name="dvt_1">
                                    <xsl:variable name="dvt_StyleName">ListForm</xsl:variable>
                                    <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row[@ID=$ListItemId]"/>
                                    <div>
                                        <span id="part1">
                                            <table cellpadding="4" cellspacing="0" border="0">
                                            <caption style="color:red;">{{<xsl:value-of select="$ListItemId"/>}}</caption>
                                                <tr>             
                                                    <td class="ms-vh">
                                                    <table border="0" width="100%">
                                                        <xsl:call-template name="dvt_1.body">
                                                            <xsl:with-param name="Rows" select="$Rows"/>
                                                        </xsl:call-template>
                                                    </table>                        
                                                    </td>
                                                </tr>
                                            </table>
                                        </span>
                                        <SharePoint:AttachmentUpload runat="server" ControlMode="Edit"/>
                                        <SharePoint:ItemHiddenVersion runat="server" ControlMode="Edit"/>
                                    </div>
                                </xsl:template>
                                <xsl:template name="dvt_1.body">
                                    <xsl:param name="Rows"/>
                                    <tr>
                                        <td class="ms-toolbar" nowrap="nowrap">
                                            <table>
                                                <tr>
                                                    <td width="99%" class="ms-toolbar" nowrap="nowrap"><IMG SRC="/_layouts/15/images/blank.gif" width="1" height="18"/></td>
                                                    <td class="ms-toolbar" nowrap="nowrap">
                                                        <SharePoint:SaveButton runat="server" ControlMode="Edit" id="savebutton1"/>
                                                        <input type="button" value=" Ok " name="btnTopSave" onclick="javascript:{ddwrt:GenFireServerEvent('__commit')}" style="height:22px"/>
                                                    </td>
                                                </tr>
                                            </table>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td class="ms-toolbar" nowrap="nowrap">
                                            <SharePoint:ItemValidationFailedMessage runat="server" ControlMode="Edit"/>
                                        </td>
                                    </tr>
                                    <xsl:for-each select="$Rows">
                                        <xsl:call-template name="dvt_1.rowedit"/>
                                    </xsl:for-each>
                                    <tr>
                                        <td class="ms-toolbar" nowrap="nowrap">
                                            <table>
                                                <tr>
                                                    <td class="ms-descriptiontext" nowrap="nowrap">
                                                        <SharePoint:CreatedModifiedInfo ControlMode="Edit" runat="server"/>
                                                    </td>
                                                    <td width="99%" class="ms-toolbar" nowrap="nowrap"><IMG SRC="/_layouts/15/images/blank.gif" width="1" height="18"/></td>
                                                    <td class="ms-toolbar" nowrap="nowrap">
                                                        <SharePoint:SaveButton runat="server" ControlMode="Edit" id="savebutton2"/>
                                                    </td>
                                                </tr>
                                            </table>
                                        </td>
                                    </tr>
                                </xsl:template>
                                <xsl:template name="dvt_1.rowedit">
                                    <xsl:param name="Pos" select="position()"/>
                                    <tr>
                                        <td>
                                            <xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
                                                    <span ddwrt:amkeyfield="ID" ddwrt:amkeyvalue="ddwrt:EscapeDelims(string(@ID))" ddwrt:ammode="view"></span>
                                            </xsl:if>                                
                                            <table cellpadding="4" cellspacing="0" border="0">
                                                <tr>        
                                                    <th class="ms-vh SmallHeader">Created</th>          
                                                    <th class="ms-vh SmallHeader">Quote</th>
                                                    <th class="ms-vh SmallHeader">RFQ Manager</th>
                                                    <th class="ms-vh SmallHeader">Assigned To</th>
                                                    <th class="ms-vh SmallHeader">Value</th>
                                                    <th class="ms-vh SmallHeader">Status</th>
                                                </tr>        
                                                  <tr valign="middle">                        
                                                      <td class="ms-vb2"><SharePoint:FormField runat="server" id="fff2{$Pos}" ControlMode="Display" FieldName="Created" __designer:bind="{ddwrt:DataBind('u',concat('fff2',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Created')}"/></td>           
                                                      <td class="ms-vb2" id="QNContrainer"><SharePoint:FormField runat="server" id="fff10{$Pos}" ControlMode="Display" FieldName="Quote_x0020__x0023_" __designer:bind="{ddwrt:DataBind('u',concat('fff10',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Quote_x0020__x0023_')}"/></td>
                                                      <td class="ms-vb-user"><SharePoint:FormField runat="server" id="fff5{$Pos}" ControlMode="Display" FieldName="Account_x0020_Manager" __designer:bind="{ddwrt:DataBind('u',concat('fff5',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Account_x0020_Manager')}"/></td>
                                                      <td class="ms-vb-user"><SharePoint:FormField runat="server" id="fff7{$Pos}" ControlMode="Display" FieldName="Assigned_x0020_To" __designer:bind="{ddwrt:DataBind('u',concat('fff7',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Assigned_x0020_To')}"/></td>
                                                      <td class="ms-vb2" style="color:#F15854;"><SharePoint:FormField runat="server" id="fff12{$Pos}" ControlMode="Display" FieldName="Quote_x0020_Value" __designer:bind="{ddwrt:DataBind('u',concat('fff12',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Quote_x0020_Value')}"/></td>
                                                      <td class="ms-vb2"><SharePoint:FormField runat="server" id="fff14{$Pos}" ControlMode="Display" FieldName="Status" __designer:bind="{ddwrt:DataBind('u',concat('fff14',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Status')}"/></td>
                                                  </tr>
                                                <tr>  
                                                    <td colspan="6">
                                                        <div id="Tabs">
                                                            <ul>
                                                                <li id="RFQTab">
                                                                <a href="#RFQ">
                                                                    <span>RFQ</span>
                                                                </a>
                                                                </li>
                                                            </ul>
                                                            <div id="RFQ">
                                                                <table border="0" cellspacing="0" cellpadding="4" width="100%">
                                                                    <tr>
                                                                        <td colspan="2" class="ms-formlabel">
                                                                            <H3 class="ms-standardheader">
                                                                            <nobr>
                                                                                Project Name<span class="ms-formvalidation"> *</span>
                                                                            </nobr>
                                                                            </H3>
                                                                        </td>
                                                                    </tr>
                                                                    <tr>
                                                                        <td colspan="2" class="ms-formbody longField">
                                                                            <span style="color:red;">{{<xsl:value-of select="@ID"/>}}</span>
                                                                            <SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="Edit" FieldName="Title" __designer:bind="{ddwrt:DataBind('u',concat('ff1',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Title')}"/>
                                                                            <SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="Title" ControlMode="Edit"/>
                                                                        </td>
                                                                    </tr>

[这里有许多行具有相同语法的字段,为清楚起见已删除]

                                                                </table>
                                                            </div>
                                                        </div>
                                                    </td>
                                                </tr>  
                                            </table>
                                            <br/>
                                        </td>
                                    </tr>
                                </xsl:template>
                            </xsl:stylesheet>
                        </Xsl>
                        <DataFields>@Title,Project Name;@Product,Product;@Customer,Customer;@Account_x0020_Manager,Account Manager;@emailOptions,emailOptions;@Assigned_x0020_To,Assigned To;@Lead,Lead;@Quickship,Quickship;@Status,Status;@Notes,Notes;@ID,ID;@ContentType,Content Type;@Modified,Modified;@Created,Created;@Author,Created By;@Editor,Modified By;@_UIVersionString,Version;@Attachments,Attachments;@ItemChildCount,Item Child Count;@FolderChildCount,Folder Child Count;</DataFields>
                        <ParameterBindings>
                             <ParameterBinding Name="ListItemId" Location="QueryString(SPID)" DefaultValue="0"/>
                             <ParameterBinding Name="weburl" Location="None" DefaultValue="http://jam3iya4"/>
                             <ParameterBinding Name="ListID" Location="None" DefaultValue="{5A1F5F46-E308-440D-A7CE-3FF0587D9B4B}"/>
                             <ParameterBinding Name="dvt_apos" Location="Postback;Connection"/>
                             <ParameterBinding Name="ManualRefresh" Location="WPProperty[ManualRefresh]"/>
                             <ParameterBinding Name="UserID" Location="CAMLVariable" DefaultValue="CurrentUserName"/>
                             <ParameterBinding Name="Today" Location="CAMLVariable" DefaultValue="CurrentDate"/>
                        </ParameterBindings>
                    </WebPartPages:DataFormWebPart>
4

1 回答 1

0

好的,所以我设法解决了这个问题,希望这可以帮助面临同样问题的其他人。事实证明(这只是实验性的,我希望有人比我更精明地确认这一点)在自定义 webpart 中使用 DataFormWebPart 是可行的。只是不在自定义用户控件 (.ascx) 中,当我使用 Visual Studio 创建我的可视化 Web 部件时,它创建了第一个添加到 Web 部件的用户控件,并且按照习惯,我会将所有控件放在那里,包括 DataFormWebPart。这对于插入表单来说很好,它可以完美地工作,保存数据并继续进行重定向。在编辑表单中它显示正确,但保存时触发的事件根本不保存并且字段被重置。 解决方案是

  1. 在共享点设计器中为您需要编辑的列表创建一个编辑表单。
  2. 然后在浏览器中导航到该表单并编辑该页面(在浏览器中)
  3. 编辑包含表单的 Web 部件并将其导出。
  4. 现在该 webpart 文件只是一个包含 DataFormWebPart 的所有属性列表的 xml 文件。这个文件你可以在 Visual Studio 中导入
  5. 可以在此文件中对 xsl 或绑定进行任何自定义(我使用 xsllink 路由并链接到我保存在站点资产中的外部 xsl 文件)
  6. 虽然将此 webpart 包含到您的项目中,但不要将其添加到 ascx 文件中,只需以编程方式将其加载到 webpart .cs 中(作为用户控件的兄弟而不是子控件)
  7. 这是可选的,我创建了一个继承 DataFormWebPart 的类并将其与此 webpart 关联,因此我可以以编程方式操作一些属性并在构造函数中传递一些初始参数,但实际上......你不必我只是礼貌
  8. 此时,您的编辑表单功能齐全,您可以从自定义 Web 部件编辑和保存内容,如果您小心地将列表 guid 放置在参数等中,您可以在不同的服务器上重用 Web 部件

花了我一段时间,到目前为止,我不确定为什么当 DataFormWebPart 在 ascx 中时出现静默错误,但是嘿,我没有恢复我生命中的那几天,所以不妨用它来体验和“有趣”sharepoint

干杯:)

于 2015-12-28T08:15:38.907 回答