使用自定义站点地图属性作为树视图节点值

时间:2015-12-17 15:32:06

标签: c# treeview sitemap

我在web.sitemap中添加了自定义属性字段PageID。我试图在TreeView中显示我的站点地图,我想使用该字段作为树节点的值。我收到以下错误:

  

无法绑定到' PageID'数据绑定TreeView时的属性(由ValueField指定)。请检查Bindings字段。

如何将TreeNode值设置为我的站点地图中的自定义属性值?

的web.sitemap

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode  url="~/" title="Home" PageID="0">
    <siteMapNode url="" title="Security" PageID="1">
      <siteMapNode url="~/PageSecurity" title="Page Security" PageID="2"/>
      <siteMapNode url="~/UserSecurity" title="User Security" PageID="3"/>
    </siteMapNode>
  </siteMapNode>
</siteMap>

aspx文件

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
    <asp:TreeView ID="MenuTreeView" CssClass="SecurityTree" runat="server" DataSourceID="SiteMapDataSource1" ExpandDepth="0" OnSelectedNodeChanged="MenuTreeView_SelectedNodeChanged">
        <DataBindings>
            <asp:TreeNodeBinding NavigateUrl="" TextField="title" ValueField="PageID"/>
        </DataBindings>
    </asp:TreeView>
        <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false" />
</asp:Content>

1 个答案:

答案 0 :(得分:0)

从一个有点类似问题here的答案开始,我终于可以开始工作了。

我从绑定<asp:TreeNodeBinding NavigateUrl="" TextField="title"/>中删除了ValueField,然后在后面的代码中手动设置它。

protected void Page_Load(object sender, EventArgs e)
{
    MenuTreeView.TreeNodeDataBound += new TreeNodeEventHandler(MenuTreeView_DataBound);
}

protected void MenuTreeView_DataBound(object sender, TreeNodeEventArgs e)
{
    SiteMapNode thisMapNode = (SiteMapNode)e.Node.DataItem;
    if (thisMapNode["PageID"] != null)
    {
        e.Node.Value = thisMapNode["PageID"];
    }
}

我现在有一个页面将我的SiteMap显示为树,并且在我的SelectedNodeChanged事件中MenuTreeView.SelectedValue正确拥有我的自定义PageID。