Редактировать или добавить ListItem для списка в ApplicationPage с ListFormWebPart или DataFormWebPart, но как?
-
22-10-2019 - |
Вопрос
Я хочу сделать эту программную основу в 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="<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);
Этот код прекрасно работает в веб -частях, но не в 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, он попытается кэшировать его и в конечном итоге не удастся, с исключением, «попытался использовать объект, который перестал существовать». Кроме того, у людей часто возникают проблемы со стандартной функциональностью ленты ленты веб -частей на страницах приложений, когда некоторые кнопки выделяются.
Так что, даже если вы решите свою проблему сегодня, вы, вероятно, получите пару завтра.
Так что, в основном, я бы порекомендовал вам создать страницу сайта и разместить там нужные функции веб -частей. И если вам нужны дополнительные программные действия, вы можете разместить свою пользовательскую веб -часть на одной странице и выполнить все, что вам нужно.