代码之家  ›  专栏  ›  技术社区  ›  Loofer

ASP.NET用户控件奇数行为

  •  0
  • Loofer  · 技术社区  · 16 年前

    我有一个试图在项目中使用的用户控件。

    如果我这样做(在控件中引用站点地图)

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

    我有个奇怪的错误。

    分析器错误消息:无法从“sitemap”属性的字符串表示形式“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>
    

    我所做的唯一“聪明”的事情是使用“ASPNETHyLoC编译器”和“ASPNETHYMLY”来创建一个包含我的USER控件的.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 Mistage,因此我无法为控件工作调试,所以我可以为Mistage页面自己做这件事。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Jan Remunda    16 年前

    在你的用户角色中试试这个:

    SiteMapDataSource ds = this.Page.FindControl(this.SiteMap) as SiteMapDataSource;
    
    推荐文章