【问题标题】:How can i retrieve the List ID for the ListFormWebPart on my custom edit form?如何在我的自定义编辑表单上检索 ListFormWebPart 的列表 ID?
【发布时间】:2012-02-23 01:42:46
【问题描述】:

我有一个非常基本的自定义编辑表单,一个带有代码的 aspx。它是标准编辑表单的直接副本,带有一些额外的 javascript。 我用设计师(呃)打开它并直接复制它。 问题是 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)

【问题讨论】:

    标签: asp.net sharepoint-2010 web-parts code-behind


    【解决方案1】:

    通过大量试验解决了一些肘部油脂,幸运的是偶然发现了这个网站: 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"] %>
    

    【讨论】:

      【解决方案2】:

      我无法说明您的其余代码或您正在尝试做的事情,但您可能需要解码列表 ID 以进一步使用这种方法。

      String DecodedListId = Server.UrlDecode(ListId);
      

      【讨论】:

      • 这不是必需的。 QueryString 集合在填充时已经解码了 url。
      【解决方案3】:

      ListViewWebPart 需要一个 GUID,而您要给它一个三位数字。您是否尝试传递项目 ID?列表 ID 如下所示:{880B8CC4-A1C4-47F9-BCBB-A04C615BA4BE}

      尝试从某个列表的列表设置页面中获取 List 查询参数,以确保您拥有正确的 GUID(有时对大括号也很挑剔)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 1970-01-01
        • 1970-01-01
        • 2017-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多