0

在我的 Web.sitemap 中,我有以下内容:

<siteMapNode url="~/Groups/ViewGroups.aspx" urlRoute="groups/{PostId}/{PostTitle}" />
</siteMapNode>

在我的 MasterPage 中,我实现了ItemDataBound事件来尝试设置动态实现母版页的每个页面的标题,但由于某种原因没有设置标题。

protected void SiteMapPath1_ItemDataBound(object sender, SiteMapNodeItemEventArgs e)
{
    string CurrentNodeTitle = GetTitleFromDatabase();

    if (e.Item.ItemType == SiteMapNodeItemType.Current) {
         e.Item.SiteMapNode.Title = CurrentNodeTitle;
    }
}

我也在 ItemCreated 事件中尝试过这个,但它仍然没有工作。

如果我在 Web.sitemap 中设置标题,那么它可以完美运行,但是当我使用e.Item.SiteMapNode.Title = CurrentNodeTitle;设置它时 标题未定。

4

2 回答 2

0

尝试这个。

private string currentKey = SiteMap.CurrentNode.Key
protected void SiteMapPath1_ItemDataBound(object sender, MenuEventArgs e)
{
    string CurrentNodeTitle = GetTitleFromDatabase();

    if (e.Item.DataPath == currentKey){
         e.Item.Text = CurrentNodeTitle;
    }
}

编辑说明:

它应该是 MenuEventArgs

于 2012-08-18T07:32:50.250 回答
0

这个问题现在大约有6年了,一个答案是完全错误的,应该删除。我很难找到答案——它并不像我预期的那样直截了当,但答案仍然很简单。

使用命名空间中的静态 SiteMapSiteMapResolve事件System.Web(不是您的 SiteMapPath 实例!),您可以动态操作 URL 和标题。

就我而言,我有一个自定义本地化方法,可以从数据库中检索本地化字符串。站点地图标题包含用于识别字符串的键。这是我的母版页背后的代码:

protected void Page_Load(object sender, EventArgs e)
{
    // ...

    SiteMap.SiteMapResolve += (o, args) =>
    {
        if (SiteMap.CurrentNode == null)
            return null;

        SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);
        currentNode.Title = SessionObject.LocalizeText(currentNode.Title);

        SiteMapNode tempNode = currentNode;
        while (tempNode.ParentNode != null)
        {
            tempNode = tempNode.ParentNode;
            tempNode.Title = SessionObject.LocalizeText(tempNode.Title);
        }

        return currentNode;
    };

    // ...
}

然后在您的母版页 ASPX(或者可能是任何使用此母版页的 ASPX 页面)中,您可以添加<asp:SiteMapPath runat="server" ... />它,它应该由 SiteMapResolve 事件处理。

于 2018-03-20T10:26:22.183 回答