我有一个试图在项目中使用的用户控件。
如果我这样做(在控件中引用站点地图)
<%@ 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页面自己做这件事。