我想以编程方式进行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="&lt;View&gt;&lt;Query&gt;&lt;Where&gt;&lt;Eq&gt;&lt;FieldRef Name=&quot;ContentType&quot;/&gt;&lt;Value Type=&quot;Text&quot;&gt;مورد&lt;/Value&gt;&lt;/Eq&gt;&lt;/Where&gt;&lt;/Query&gt;&lt;/View&gt;">
        <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_LoadListFormWebPart_Init 事件,但没有任何成功。我使用SharePoint Designer并创建 ListFormWebPart 然后将其复制并粘贴到我的申请页面,还添加了它所需的程序集,但也没有任何成功。
我不知道有什么问题,如果我的不是,请采取正确的方法。

有帮助吗?

解决方案

首先,OOTB WebParts不受正式支持的支持,以在SharePoint中的应用程序页面上工作。正如我所知,可以从官方MS课程中学到 10232.

尽管在某些情况下,尽管在应用程序页面中有这些WebParts实际上会起作用,但它们仍有许多潜在的问题。例如,如果您向OOTB XSLT-WEBPART提供XSLLINK,例如DFWP,DVWP或XLV,它将尝试缓存它,并最终将失败,但如果尝试使用已停止存在的对象的例外”。此外,当某些按钮变成灰色时,人们通常会在应用程序页面上使用标准WebParts功能区功能问题。

因此,即使您今天解决问题,明天也可能会得到一对。

因此,基本上,我建议您创建一个站点页面,并将所需的WebParts功能放置在此处。而且,如果您需要一些其他编程操作,则可以将自定义WebPart放置在同一页面上,并执行所需的任何内容。

许可以下: CC-BY-SA归因
scroll top