我在从用户控件(子布局)的代码隐藏中为页面设置 Page.Title 时遇到问题。
我们有一个布局,MainLayout.aspx。我可以从这个页面的代码隐藏中设置页面标题,它工作正常。但是,如果在此之后,我尝试在 MySublayout1 的代码隐藏中设置页面标题,则会为 Page.Title 属性设置新值,但更改不会反映在页面上。
我已经尝试将代码从 Page_Load 移动到页面和控件的 OnInit 事件,但似乎没有任何效果。知道为什么这不起作用吗?
我在从用户控件(子布局)的代码隐藏中为页面设置 Page.Title 时遇到问题。
我们有一个布局,MainLayout.aspx。我可以从这个页面的代码隐藏中设置页面标题,它工作正常。但是,如果在此之后,我尝试在 MySublayout1 的代码隐藏中设置页面标题,则会为 Page.Title 属性设置新值,但更改不会反映在页面上。
我已经尝试将代码从 Page_Load 移动到页面和控件的 OnInit 事件,但似乎没有任何效果。知道为什么这不起作用吗?
最好的方法是创建一个新的渲染或子布局来渲染页面的 -section。因此,您可以在子布局中设置文字或 sc:text 控件中的值,而不是仅从代码隐藏中设置 Page.Title。通过这种方式,您可以根据当前的 Sitecore 项目一次性设置更多属性,例如元关键字和元描述。
我会将以下内容添加到其中的布局或子布局中:
<head runat="server" id="_Head">
<title><sc:FieldRenderer ID="frTitle" runat="server" FieldName="title" /></title>
</head>
还要确保调用DataBind();
或设置Sitecore.Context.State.DataBind
为 true。
你可以简单地使用这个:
<title> <%=Sitecore.Context.Item["PageTitleFieldName"] %> </title>
从给定字段呈现页面标题效果很好。
如果您希望 Sublayout 覆盖 Layout 中设置的标题,您可以将 Layout 中的代码移动到Page_Init
并Page_Load
在您的 Sublayout 中使用。
如果这不起作用,那么您的子布局可能无法访问页面。您可以尝试使用WebUtil.CurrentPage.Title
访问当前页面标题。它可能还需要您在 head 和 title 元素上设置 runat="server" ,如下所示:
<head runat="server">
<title runat="server"></title>