使用自定义站点地图属性作为树视图节点值
Use custom sitemap attribute as treeview node value
我在 web.sitemap 中添加了自定义属性字段 PageID
。我试图在 TreeView 中显示我的站点地图,我想将该字段用作树节点的值。我收到以下错误:
Could not bind to the 'PageID' property (specified by ValueField) while data binding TreeView. Please check the Bindings fields.
如何将 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>
从对一个有点类似的问题的回答开始 here,我终于能够完成这项工作。
我从绑定中删除了 ValueField <asp:TreeNodeBinding NavigateUrl="" TextField="title"/>
,然后我在后面的代码中手动设置了它。
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。
我在 web.sitemap 中添加了自定义属性字段 PageID
。我试图在 TreeView 中显示我的站点地图,我想将该字段用作树节点的值。我收到以下错误:
Could not bind to the 'PageID' property (specified by ValueField) while data binding TreeView. Please check the Bindings fields.
如何将 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>
从对一个有点类似的问题的回答开始 here,我终于能够完成这项工作。
我从绑定中删除了 ValueField <asp:TreeNodeBinding NavigateUrl="" TextField="title"/>
,然后我在后面的代码中手动设置了它。
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。