Редактировать или добавить ListItem для списка в ApplicationPage с ListFormWebPart или DataFormWebPart, но как?

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/19617

Вопрос

Я хочу сделать эту программную основу в ListId и ListItemid (для редактирования), поэтому, если я хочу использовать DataFormWebpart, мне придется установить свойство XSL в режиме проектирования, и я не знаю, как достичь XSL List во время выполнения и объекта модель. Я могу изменить целевой список в строке запроса, но интерфейс не изменится, потому что свойство 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);

Этот код прекрасно работает в веб -частях, но не в ApplicationPage, и я должен сказать, что я добавил все пространства имен и ссылки, которые нуждаются в этой веб -части, на страницу.
Это дает мне эту ошибку:

System.NullReferenceException: ссылка на объект не установлен на экземпляр объекта. на microsoft.sharepoint.webpartpages.listformwebpart.onperender (eventargs e) на System.web.ui.control.perenderRecursiveInternal () at System.Web.UI.Control.PerenderRecursiveInternal () at System.Web.UI.ContrololrololoRecurnerRecurernernarnalnal () at System.Web.UI.ControloloRecurernernarnernal at system.web.ui.control.prerenderRecursiveInternal () at System.Web.UI.Control.PerenderRecurcursiveInternal () at System.Web.UI.Control.PerendErenderRecursiveInternal () в System.Web.UI.Control.PerenderRecurciveInternater () .Web.ui.control.prerenderRecursiveInternal () at system.web.ui.page.processRequestmain (Boolean IncludestagesbeForeAsyncpoint, Boolean IncludeStagesAgesyNcpoint)

Я помещаю и проверяю этот код в Page_Init, Page_Load а также ListFormWebPart_Init события, но не успех. Я использую SharePoint Designer и создаю ListFormWebPart а затем скопируйте его и вставьте на мою страницу приложения, а также добавьте необходимую для нее сборку, но также не успех.
Я не знаю, в чем проблема, пожалуйста, дайте правильный подход, если у меня нет.

Это было полезно?

Решение

Прежде всего, веб -части OOTB официально не поддерживаются для работы на страницах приложения в SharePoint. Как мне сказали, это можно узнать из официального курса MS 10232.

И, несмотря на то, что в некоторых случаях на самом деле будут работать эти веб -части на страницах приложений, с ними есть много потенциальных проблем. Например, если вы предоставите XSllink для OOTB XSLT-Webpart, например DFWP, DVWP или XLV, он попытается кэшировать его и в конечном итоге не удастся, с исключением, «попытался использовать объект, который перестал существовать». Кроме того, у людей часто возникают проблемы со стандартной функциональностью ленты ленты веб -частей на страницах приложений, когда некоторые кнопки выделяются.

Так что, даже если вы решите свою проблему сегодня, вы, вероятно, получите пару завтра.

Так что, в основном, я бы порекомендовал вам создать страницу сайта и разместить там нужные функции веб -частей. И если вам нужны дополнительные программные действия, вы можете разместить свою пользовательскую веб -часть на одной странице и выполнить все, что вам нужно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top