2009-06-15 19 views
0

私はプロジェクトで使用しようとしているusercontrolがあります。asp.net usercontrol odd behavior

私はこの(コントロールでは、サイトマップを参照)

<%@ Register TagPrefix="OS" Namespace="OS_Layouts" Assembly="OSControlLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0831306e55dc1c27" %> 

<html><body> 
<OS:OSmenu runat="server" ID="men1" SiteMap="siteMapDataSource1" /> 
    <asp:SiteMapDataSource ShowStartingNode="false" SiteMapProvider="CombinedNavSiteMapProvider" 
    ID="siteMapDataSource1" runat="server" /> 
</body </html> 

のようにそれを行う場合、私は奇妙なエラーが発生します。

パーサーエラーメッセージ:「サイトマップ」プロパティのための文字列表現「siteMapDataSource1」からの型のオブジェクトのSystem.Web.UI.WebControls.SiteMapDataSource 'を作成できません。

これを行うと正常に動作します。 (pageload中にコードにサイトマップを追加)

<%@ Register TagPrefix="OS" Namespace="OS_Layouts" Assembly="OSControlLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0831306e55dc1c27" %> 
<script runat=server> 

protected void Page_Load(object sender, EventArgs e) 
    { 
    men1.SiteMap = siteMapDataSource1;   
    } 
</script> 
<html><body> 
<OS:OSmenu runat="server" ID="men1" /> 
    <asp:SiteMapDataSource ShowStartingNode="false" siteMapProvider="CombinedNavSiteMapProvider" ID="siteMapDataSource1" runat="server" /> 
</body> </html> 

私は私が使用できる単一のDLLに私のユーザーコントロールを含む.dllファイルを作成するために、「aspnet_compiler」と「aspnet_merge」を使用しているやっているだけで「賢い」もの他のプロジェクト。

私が誤解したか、または何かを誤って構成しましたか?

ありがとう 編集:いくつかの詳細情報。

私のaspx.csはこのように見えます 私はいつも「失敗!

using System; 
using System.Web.UI.WebControls; 

public partial class OSmenu : System.Web.UI.UserControl 
{ 

    public String SiteMapID { get; set; } 


    protected void Page_Load(object sender, EventArgs e) 
    { 

    if (SiteMapID == "") return; 
     SiteMapDataSource foo = Page.FindControl(SiteMapID) as SiteMapDataSource; 
     if (foo == null) 
     { 
      Response.Write("</br> fail!"); 
     } 
     else 
     { 
      Response.Write("/<br> ok!" + foo.UniqueID); 
     } 
    } 



} 
マスターページ自体のために、これは少しコントロールのホストページは、SharePointマスターページであるという事実によって複雑になる、と私は制御のために働くためにデバッグを得ることができないすべての

、私ができます!

答えて

1

あなたuserconrolでこれを試してみてください:

SiteMapDataSource ds = this.Page.FindControl(this.SiteMap) as SiteMapDataSource; 
関連する問題