我有一个非常基本的自定义编辑表单,一个带有代码的aspx。它是标准编辑表单的直接副本,带有一些额外的javascripts。 我和设计师(urgh)打开了它并直接复制了它。 问题是ListFormWebPart需要列表ID ,我试图在没有运气的情况下获取。
它不会让我调试,我基本上想知道我是否完全关闭并且应该采用不同的方法,或者我错过了一些关键的东西?
<WebPartPages:WebPartZone runat="server" FrameType="None" ID="Main" Title="loc:Main"><ZoneTemplate>
<WebPartPages:ListFormWebPart ID="ListFormWebPart" runat="server" __MarkupType="xmlmarkup" WebPart="true" __WebPartId="{B1433CAB-755A-4E8C-A35E-629AD2C5BB67}" >
<WebPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/WebPart/v2">
<Title>Dokument</Title>
<FrameType>Default</FrameType>
<Description />
<IsIncluded>true</IsIncluded>
<PartOrder>2</PartOrder>
<FrameState>Normal</FrameState>
<Height />
<Width />
<AllowRemove>true</AllowRemove>
<AllowZoneChange>true</AllowZoneChange>
<AllowMinimize>true</AllowMinimize>
<AllowConnect>true</AllowConnect>
<AllowEdit>true</AllowEdit>
<AllowHide>true</AllowHide>
<IsVisible>true</IsVisible>
<DetailLink />
<HelpLink />
<HelpMode>Modeless</HelpMode>
<Dir>Default</Dir>
<PartImageSmall />
<MissingAssembly>Cannot import this Web Part.</MissingAssembly>
<PartImageLarge />
<IsIncludedFilter />
<ExportControlledProperties>true</ExportControlledProperties>
<ConnectionID>00000000-0000-0000-0000-000000000000</ConnectionID>
<ID>g_b1433cab_755a_4e8c_a35e_629ad2c5bb67</ID>
<ListName xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm"> <%=ListId%> </ListName>
<ListId xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm"> <%=ListId%> </ListId>
<PageType xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">PAGE_EDITFORM</PageType>
<FormType xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">6</FormType>
<ControlMode xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">Edit</ControlMode>
<ViewFlag xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">1048576</ViewFlag>
<ViewFlags xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">Default</ViewFlags>
<ListItemId xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">0</ListItemId>
</WebPart>
</WebPartPages:ListFormWebPart>
</ZoneTemplate></WebPartPages:WebPartZone>
这是背后的小代码:
public partial class RKEditForm : LayoutsPageBase
{
public string ListId { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
Debugger.Launch();
ListId = Request.QueryString["List"];
if (string.IsNullOrEmpty(ListId))
{
ListId = "123";
}
}
}
这是sharepoint发送的请求:(在uls中获取)
Name=Request (GET:http://rkdhs-a:80/_layouts/RK.Dhs/RKEditForm.aspx?List=12cfe831%2D9c9d%2D4393%2D85dc%2Dd522440035ca&ID=4&Source=http%3A%2F%2Frkdhs%2Da%2FDokument%2FForms%2FAllItems%2Easpx&RootFolder=%2FDokument&ContentTypeId=0x01010053E1D612BA3F4E21AA250ECD751942B3004C051FA1C7EDB047A5DE0AABD0672600&IsDlg=1)
我一直得到这个例外:
System.FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
at System.Guid..ctor(String g)
at Microsoft.SharePoint.WebPartPages.ListFormWebPart.get_ItemContext()
at Microsoft.SharePoint.WebPartPages.ListFormWebPart.EnsureList()
at Microsoft.SharePoint.WebPartPages.ListFormWebPart.EnsureListAndForm()
at Microsoft.SharePoint.WebPartPages.ListFormWebPart.UseLegacyForm()
at Microsoft.SharePoint.WebPartPages.ListFormWebPart.CreateChildControls()
at System.Web.UI.Control.EnsureChildControls()
at System.Web.UI.WebControls.WebParts.Part.get_Controls()
at System.Web.UI.Control.SetRenderMethodDelegate(RenderMethod renderMethod)
at ASP._layouts_rk_dhs_rkeditform_aspx.__BuildControlListFormWebPart()
at ASP._layouts_rk_dhs_rkeditform_aspx.__BuildControl__control24(Control __ctrl)
at System.Web.UI.WebControls.WebParts.WebPartZone.GetInitialWebParts()
at System.Web.UI.WebControls.WebParts.WebPartManager.RegisterZone(WebZone zone)
at System.Web.UI.WebControls.WebParts.WebPartZone.OnInit(EventArgs e)
at Microsoft.SharePoint.WebPartPages.WebPartZone.OnInit(EventArgs e)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
答案 0 :(得分:2)
解决了很多试验一些肘部油脂,幸运地在这个网站上磕磕绊绊: http://blogs.sharepointdam.com/jen/archive/2009/10/12/custom-list-forms-with-code-behind.aspx
基本上将 OnInit =“Lfwp_OnInit”添加到webpart定义中,已删除
<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);
}
Jen(我发布的博客)描述了这个问题并且很好地解决了这个问题:
那么,问题出在哪里? ListFormWebPart非常灵活 可以在飞行中渲染自己的编程艺术作品 自动,具体取决于列表,内容类型和列 显示,但它不检索ListName和ListItemId 从Page.REQUEST自动。好吧,我们可以做到这一点 代码隐藏,但那不是问题;-)问题在于 在OnPreInit事件期间,控件不可用于设置这些控件 属性,并在OnInit事件处理程序被触发SharePoint之前 已经抛出一个异常,说明找不到任何项目 列表和itemId指定... Duhh! 嗯,解决方案实际上(就像生活中的大多数事情一样)是微不足道的: OnInit事件在触发页面之前触发控件。 因此,不仅要添加代码隐藏事件处理程序也很重要 在页面级别,但也为Web部件本身:
我确实设法使用以下行在aspx中设置ListID,但ListName不起作用..尝试了各种类型的转换,转换和技巧但没有成功,所以最后我决定代码 - 解决方案背后。
<% ListFormWebPart.ListId = new Guid(Request.QueryString["List"]) %>
<% ListFormWebPart.ListName = Request.QueryString["List"] %>
答案 1 :(得分:0)
我不能代表您的其余代码或您要做的事情,但您可能需要解码列表ID以进一步采用此方法。
String DecodedListId = Server.UrlDecode(ListId);
答案 2 :(得分:-1)
ListViewWebPart需要一个GUID,你给它一个三位数字。您是否尝试传递商品ID?列表ID如下所示:{880B8CC4-A1C4-47F9-BCBB-A04C615BA4BE}
尝试从某些列表的列表设置页面中获取List查询参数,以确保您拥有正确的GUID(有时候对于使用花括号也很挑剔)。