我有一个我试图在项目中使用的用户控件。
如果我这样做(参考控件中的站点地图)
<%@ 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>
我正在做的唯一“聪明”的事情就是使用'aspnet_compiler'和'aspnet_merge'来创建一个包含我的usercontrols的.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主页面,所有这些都有点复杂,我无法调试为控件工作,我可以为masterpage本身!
答案 0 :(得分:1)
在您的userconrol中尝试此操作:
SiteMapDataSource ds = this.Page.FindControl(this.SiteMap) as SiteMapDataSource;