使用ListFormWebPart或DataFormWebPart编辑或添加ListItem到list列表中,但是如何?
-
22-10-2019 - |
题
我想以编程方式进行listID和listItemid(用于编辑)上的操作,因此,如果我想使用dataformwebpart,我必须以设计模式设置XSL属性,并且我不知道如何在运行时和对象中达到目标列表的XSL模型。我可以更改查询字符串中的目标列表,但是由于未定义XSL属性,该界面不会更改:
<WebPartPages:DataFormWebPart id="dataForm" runat="server" IsIncluded="True" NoDefaultStyle="TRUE"
ViewFlag="8" Title="TestParnian" PageType="PAGE_EDITFORM" ListName="{8965AE3A-CCA0-4502-B7CE-056CD670C016}" Default="FALSE"
DisplayName="TestParnian" __markuptype="vsattributemarkup" __WebPartId="{2CDB3F60-D76F-4410-AEDA-28D9D5815854}">
<DataSources>
<SharePoint:SPDataSource id="TestParnian2" runat="server" DataSourceMode="ListItem" UseInternalName="true"
UseServerDataFormat="True"
selectcommand="<View><Query><Where><Eq><FieldRef Name="ContentType"/><Value Type="Text">مورد</Value></Eq></Where></Query></View>">
<SelectParameters>
<WebPartPages:DataFormParameter Name="ListItemId" ParameterKey="ListItemId"
PropertyName="ParameterValues" DefaultValue="0"/>
<WebPartPages:DataFormParameter Name="ListID"
ParameterKey="ListID" PropertyName="ParameterValues" DefaultValue="{8965AE3A-CCA0-4502-B7CE-056CD670C016}"/>
<WebPartPages:DataFormParameter Name="MaximumRows" ParameterKey="MaximumRows" PropertyName="ParameterValues"
DefaultValue="10"/>
</SelectParameters>
<InsertParameters>
<WebPartPages:DataFormParameter Name="ListItemId" ParameterKey="ListItemId"
PropertyName="ParameterValues" DefaultValue="0"/>
<WebPartPages:DataFormParameter Name="ListID"
ParameterKey="ListID" PropertyName="ParameterValues" DefaultValue="{8965AE3A-CCA0-4502-B7CE-056CD670C016}"/>
</InsertParameters>
<UpdateParameters>
<WebPartPages:DataFormParameter Name="ListItemId" ParameterKey="ListItemId"
PropertyName="ParameterValues" DefaultValue="0"/>
<WebPartPages:DataFormParameter Name="ListID"
ParameterKey="ListID" PropertyName="ParameterValues" DefaultValue="{8965AE3A-CCA0-4502-B7CE-056CD670C016}"/>
</UpdateParameters>
</SharePoint:SPDataSource>
</DataSources>
<ParameterBindings>
<ParameterBinding Name="ListItemId" Location="QueryString(ID)" DefaultValue="0"/>
<ParameterBinding Name="ListID" Location="QueryString(ListID)" DefaultValue="{8965AE3A-CCA0-4502-B7CE-056CD670C016}"/>
<ParameterBinding Name="MaximumRows" Location="None" DefaultValue="10"/>
<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>
<XSL> The XSL Property that needs to be define. </XSL>
</WebPartPages:DataFormWebPart>
因此,dataformwebpart不会帮助我。下一个选项是ListFormWebPart,它不需要XSL属性,可以在运行时使用类似的对象模型创建:
int itemId = listItem != null ? int.Parse(listItem.ID.ToString()) : -1;
ListFormWebPart lstFormList = new ListFormWebPart();
lstFormList.ListName = lst.ID.ToString("B").ToUpper();
if (itemId != -1)
{
lstFormList.ListItemId = itemId;
lstFormList.PageType = PAGETYPE.PAGE_EDITFORM;
lstFormList.ControlMode = SPControlMode.Edit;
lstFormList.TemplateName = "ListForm";
lstFormList.FormType = 6;
lstFormList.Title = "Edit " + lst.Title;
}
else
{
lstFormList.ControlMode = SPControlMode.New;
lstFormList.PageType = PAGETYPE.PAGE_NEWFORM;
lstFormList.TemplateName = "ListForm";
lstFormList.FormType = 8;
lstFormList.Title = "Add " + lst.Title;
}
lstFormList.ListTitle = lst.Title;
lstFormList.AllowClose = false;
lstFormList.AllowConnect = false;
lstFormList.AllowEdit = false;
lstFormList.AllowZoneChange = true;
lstFormList.EnableViewState = true;
lstFormList.HideIfNoPermissions = true;
Panel1.Controls.Add(lstFormList);
该代码在WebPart中很好地工作,但在ApplicationPage中不行,我必须说我将WebPart所需的所有名称空间和引用添加到页面中。
这给我这个错误:
System.NullReferenceException:对象引用未设置为对象的实例。在microsoft.sharepoint.webpartpages.listformwebpart.onprerender(EventArgs e)at System.web.ui.control.control.prerenderrecursiveInternal()在System.web.ui.control.prerenderrecursiveInternal()at System.web.ui.control.control.prerenderrecursiveinternal()at system.web.ui.control.control.control.control.control.prerenderrecursiveinternal()at system.web.ui.control.control.control.control.control.control.prolenderrenderrenderrecursiverinternalternalternalternalternalteral() .web.ui.control.prerenderrecursiveInternal()
我将此代码放在 Page_Init
, Page_Load
和 ListFormWebPart_Init
事件,但没有任何成功。我使用SharePoint Designer并创建 ListFormWebPart
然后将其复制并粘贴到我的申请页面,还添加了它所需的程序集,但也没有任何成功。
我不知道有什么问题,如果我的不是,请采取正确的方法。
解决方案
首先,OOTB WebParts不受正式支持的支持,以在SharePoint中的应用程序页面上工作。正如我所知,可以从官方MS课程中学到 10232.
尽管在某些情况下,尽管在应用程序页面中有这些WebParts实际上会起作用,但它们仍有许多潜在的问题。例如,如果您向OOTB XSLT-WEBPART提供XSLLINK,例如DFWP,DVWP或XLV,它将尝试缓存它,并最终将失败,但如果尝试使用已停止存在的对象的例外”。此外,当某些按钮变成灰色时,人们通常会在应用程序页面上使用标准WebParts功能区功能问题。
因此,即使您今天解决问题,明天也可能会得到一对。
因此,基本上,我建议您创建一个站点页面,并将所需的WebParts功能放置在此处。而且,如果您需要一些其他编程操作,则可以将自定义WebPart放置在同一页面上,并执行所需的任何内容。