Решил это во многих испытаниях, немного смазки для локтей, и, к счастью, наткнулся на этот сайт: http://blogs.sharepointdam.com/jen/archive/2009/10/12/custom-list-forms-with-code-behind.aspx
В основном добавлено OnInit = "Lfwp_OnInit" к определению веб-части, удалено
<WebPartPages:ListFormWebPart ID="ListFormWebPart1" OnInit="Lfwp_OnInit" webpart="true" runat="server" __WebPartId="{51C3F707-B5E4-408B-9ED8-9AA8C394ADB6}">
удалил эти:
<ListName xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm"> <%=ListId%> </ListName>
<ListId xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm"> <%=ListId%> </ListId>
и добавил это в мой код:
protected void Lfwp_OnInit(object sender, EventArgs e)
{
string listId = Page.Request.QueryString["List"];
string itemId = Page.Request.QueryString["ID"];
ListFormWebPart lfwp = (ListFormWebPart)sender;
lfwp.ListName = listId;
lfwp.ListItemId = Convert.ToInt32(itemId);
}
Джен (блог, который я разместил) описал проблему и хорошо ее решилс:
Так в чем же проблема?ListFormWebPart - это невероятно гибкий инструмент программирования, который может отображаться на лету автоматически, в зависимости от того, какой список, тип содержимого и столбцы должны отображаться, НО он не извлекает ListName и ListItemId из Page.REQUEST автоматически.Хорошо, мы можем сделать это с помощью выделенного кода, но это НЕ проблема ;-) Проблема в том, что элемент управления недоступен во время события OnPreInit для установки этих свойств, и до того, как обработчик события OnInit сработает, SharePoint уже выбрасываетисключение, указывающее, что для указанного списка и элемента itemId не найдено ни одного элемента ... Да!Что ж, решение на самом деле (как и большинство вещей в жизни) тривиально: событие OnInit срабатывает на элементы управления, прежде чем оно запускается для страницы.Поэтому важно добавить обработчик событий code-behind не только на уровне страницы, но и для самой веб-части:
Мне удалось установить ListID внутри aspx, используя следующую строку:но ListName не сработает .. пробовал все виды кастингов, конвертов и трюков, но безуспешно, поэтому в итоге я остановился на решении с выделенным кодом.
<% ListFormWebPart.ListId = new Guid(Request.QueryString["List"]) %>
<% ListFormWebPart.ListName = Request.QueryString["List"] %>