2009-06-15 60 views
0

我有一个用户控件,我试图在项目中使用。asp.net usercontrol奇怪的行为

如果我做这样的(参考网站地图对照)

<%@ 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”。

如果我这样做,它工作正常。 (代码页面加载过程中添加的站点地图)

<%@ 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> 

唯一的“聪明”的事情,我是用“aspnet_compiler”和“aspnet_merge”来创建一个包含我的用户控件到单个DLL中我可以用一个.dll做其他的项目。

我误解了,还是配置错了?

谢谢 编辑:一些进一步的信息。

所以我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;