2012-01-31 29 views
0

我有一个非常基本的自定义编辑窗体,后面带有代码的aspx。它是标准编辑表单的直接副本,并带有一些额外的JavaScript。 我用设计器(urgh)打开它,然后直接复制它。 问题是ListFormWebPart需要列表ID,我试图没有任何运气提取。如何在我的自定义编辑表单上检索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) 

回答

2

与很多试验的解决它的一些苦劳和后跨此网站幸运绊: http://blogs.sharepointdam.com/jen/archive/2009/10/12/custom-list-forms-with-code-behind.aspx

基本上加入的OnInit =“Lfwp_OnInit”到web部件定义,除去

<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 。自动请求。好的,我们可以用 代码隐藏,但这不是问题;-)问题是,在OnPreInit事件期间,在设置这些 属性期间以及在OnInit事件处理程序被触发之前, 控件不可用SharePoint 已引发异常,指出无法找到 列表和itemId指定的项目... Duhh! 嗯,解决方案实际上(和生活中的大多数事情一样)是微不足道的:在控件触发页面之前,OnInit事件会触发控件。

我还是设法使用以下行来设置ListID的ASPX里面,但: 因此不仅 在页面级别也为Web部件自身添加代码隐藏事件处理程序是非常重要的ListName将无法工作..尝试了各种各样的铸件,转换和技巧,但没有成功,所以最终我解决了代码隐藏解决方案。

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

我可以'不要说代码的其余部分或者你正在尝试做什么,但是你可能需要解码列表ID来进一步提前使用这种方法。

String DecodedListId = Server.UrlDecode(ListId); 
+0

这不应该需要。 QueryString集合已经在填充时解码了这些网址。 – Servy 2012-01-31 15:18:54

-1

ListViewWebPart需要一个GUID,并且你给它一个三位数的数字。您是否想要传入商品ID?列表ID将是这个样子:{880B8CC4-A1C4-47F9-BCBB-A04C615BA4BE}

尝试抓住一些列表列表设置页面列表查询参数,以确保你有适当的GUID(有时是挑剔关于有大括号也)。

相关问题