I have a requirement to create an edit form for a custom sharepoint list that displays/allows edit/hides certain fields based on the user profile. So I created a non-default edit form, copied its WebPartPages:DataFormWebPart to a custom webpart solution I'm developing and deployed it to sharepoint with a little bit of tweaking (querystring parameter renamed to SPID instead of ID because the webpart is used in a page library and using ID as a param was giving me all sorts of errors)
Now this procedure worked beautifully for a "New Form", saves the data moves to the next screen ... All peachy.
I tried the same process with an edit form, customized the XSL a bit (nothing fancy just styling and HTML tables shuffling) and to my surprise when I load the page I can see the binding working fine and all my fields have their values. But when I hit save it does a little postback and all the fields get reset to empty values and after checking none of the values got saved.
At this point to isolate the problem I've removed all customizations the only thing different from the edit form page and the custom webpart I'm using is the ListItemId location where I changed the querysting param from "ID" to "SPID".
Is there anything I should know that I obviously don't about running WebPartPages:DataFormWebPart within a custom webpart? It's puzzling that the insert form works and the edit form is showing all the values (binding OK) but not saving anything
And of course the error logs have no trace of this that I can find and I have no JavaScript errors (i.e. developer tools debugging)
Any pointers would be much appreciated.
PS: Sharepoint 2013 on prem. PS2:here's the markup for my 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 = "<View><Query><Where><And><Eq><FieldRef Name="ContentType"/><Value Type="Text">Item</Value></Eq><Eq><FieldRef Name="ID"/><Value Type="Number">{ListItemId}</Value></Eq></And></Where></Query></View>"
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">'</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>
[ many rows of fields with the same syntax here, removed for clarity ]
</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>