2012-01-31 33 views
0

私は非常に基本的なカスタム編集フォームを持っています。aspxにはコードがあります。これは、いくつかの追加のjavascriptで標準編集フォームの直接コピーです。 私はデザイナーと一緒にそれを開き、それをまっすぐにコピーしました。 問題は、ListFormWebPartがリストIDを必要としていることです。これは運がなくても取得しようとしています。カスタム編集フォームでListFormWebPartのList 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

は基本的に削除

<WebPartPages:ListFormWebPart ID="ListFormWebPart1" OnInit="Lfwp_OnInit" webpart="true" runat="server" __WebPartId="{51C3F707-B5E4-408B-9ED8-9AA8C394ADB6}"> 

を削除し、Webパーツの定義にのOnInit =「Lfwp_OnInit」を追加しましたこれら:

<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イベントは、コントロールがページに対して起動する前に発生します。 したがって、 ページレベルでもWebパーツ自体のためだけでなく、コードビハインドイベントハンドラを追加することが重要である:私は次の行を使用してASPX内ListIDを設定するために管理しなかった

が、 ListNameは動作しません。あらゆる種類のキャスト、変換、トリックを試しましたが、成功しなかったので、コードビハインドの解決策を解決しました。

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

私は、あなたのコードの残りの部分やあなたがやろうとしていることについて話してください。しかし、おそらくこのアプローチをさらに進めるためにリストIDをデコードする必要があります。

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

これは必要ではありません。 QueryStringコレクションは、URLが移入されている間にそのURLをデコードしています。 – Servy

-1

ListViewWebPartはGUIDを想定しており、3桁の数字を指定しています。あなたはアイテムIDを渡そうとしていますか?リストIDは次のようになります。{880B8CC4-A1C4-47F9-BCBB-A04C615BA4BE}

一部のリストのリスト設定ページからListクエリパラメータを取得して、適切なGUIDを持っていることを確認してください中括弧も持っていることについて)。

関連する問題