Asp.net 如何在自定义编辑表单上检索ListFormWebPart的列表ID?

Asp.net 如何在自定义编辑表单上检索ListFormWebPart的列表ID?,asp.net,sharepoint-2010,web-parts,code-behind,Asp.net,Sharepoint 2010,Web Parts,Code Behind,我有一个非常基本的自定义编辑表单,一个带有代码隐藏的aspx。它是标准编辑表单的直接副本,带有一些附加的Java脚本。 我用designerurgh打开它,然后直接复制下来。问题是ListFormWebPart需要列表id,我正在尝试获取它,但没有任何运气 它不会让我调试,我基本上想知道我是否完全离开了,应该以不同的方式处理这个问题,还是我遗漏了一些关键的东西 <WebPartPages:WebPartZone runat="server" FrameType="None" ID="Mai

我有一个非常基本的自定义编辑表单,一个带有代码隐藏的aspx。它是标准编辑表单的直接副本,带有一些附加的Java脚本。 我用designerurgh打开它,然后直接复制下来。问题是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>
这是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)

我无法解释您代码的其余部分,也无法解释您正在尝试做什么,但您可能需要解码列表id以进一步推进此方法

String DecodedListId = Server.UrlDecode(ListId);

ListViewWebPart需要一个GUID,您给它一个三位数的数字。您正在尝试传入项目ID吗?列表ID将如下所示:{880B8CC4-A1C4-47F9-BCBB-A04C615BA4BE}


尝试从某些列表的“列表设置”页面抓取列表查询参数,以确保您具有正确的GUID。有时,使用花括号也很挑剔。

通过大量尝试解决了此问题,并幸运地在该网站上绊倒:

基本上在Web部件定义中添加了OnInit=Lfwp_OnInit,已删除

<WebPartPages:ListFormWebPart ID="ListFormWebPart1" OnInit="Lfwp_OnInit" webpart="true" runat="server" __WebPartId="{51C3F707-B5E4-408B-9ED8-9AA8C394ADB6}">
Jenn在我发布的博客中描述了这个问题,sol很好地描述了:

那么,问题出在哪里?ListFormWebPart是一个非常灵活的组件 一种编程艺术,可以在飞行中呈现自己 自动,具体取决于列表、内容类型和列 将显示,但它不会检索ListName和ListItemId 从页面。自动请求。好的,我们可以用 代码隐藏,但这不是问题所在;-问题是 控件在OnPreInit事件期间不可用,无法设置这些 属性,并且在启动OnInit事件处理程序之前 已引发异常,指出找不到的项 指定的列表和itemId…Duhh! 其实,解决方法就像生活中的大多数事情一样琐碎:那就是 OnInit事件在为页触发之前在控件上触发。 因此,重要的是添加一个代码隐藏事件处理程序,而不仅仅是 在页面级别以及Web部件本身:

我确实使用下面的行在aspx中设置了ListID,但是ListName不起作用。。尝试了各种类型的铸造、转换和技巧,但都没有成功,所以最后我选择了代码隐藏解决方案

<% ListFormWebPart.ListId = new Guid(Request.QueryString["List"]) %>
<% ListFormWebPart.ListName = Request.QueryString["List"] %>

这是不必要的。QueryString集合已在填充时解码URL。
<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.ListId = new Guid(Request.QueryString["List"]) %>
<% ListFormWebPart.ListName = Request.QueryString["List"] %>