0

我被告知要重新设计MasterPage。我的公司使用AbleCommerce系统,让我告诉你它非常棘手。很久以前,我有一个由 AbleCommerece 用 HTML 创建的不同布局模板,现在我需要重新设计我的母版页。

前任:

OneColumn.html

<div id="wrapper">
      [[layout:header]] 
      <div id="Content">
            <div id="MainContent">
                  [[layout:content]]
            </div>
      </div>
[[layout:footer]]
</div>

RightSidebar.html

[[layout:header]]
<div id="outerContentWrapper">
    <div id="innerContentWrapper">
        [[layout:content]]
        [[layout:rightsidebar]]
    </div>
</div>
<div id="footerbar">[[layout:footer]]</div>

母版页:

only one ContentPlaceHolder in MasterPage

  <asp:ContentPlaceHolder ID="PageContent" runat="server">
    </asp:ContentPlaceHolder>

内容页

<cb:ScriptletPart ID="ShowProduct" runat="server" Layout="One Column" Header="Standard Header" Content="Show Product Page" Footer="Standard Footer" Title="Show Product" AllowClose="False" AllowMinimize="false" />

现在,内容页面查找One Coulmn.html并加载 html,然后一个列加载Standered Header.html引用标题的页面webuser control和布局加载显示Product Page.html引用另一组的页面,webuser controls依此类推..

问题:按照这个设计,我们现在有超过 100 个引用Asp.Net UserControls. 因此,每当我们想在我们的网站上创建新页面时,我们必须创建 .aspx 然后包含**<cb:ScriptletPart>**,创建新的 HTML 文件集,然后再创建 .aspx 文件USerControls

我想摆脱这个系统并直接在 .aspx 页面中加载 userControls,这很容易,但是我不知道如何通知 masterpage 使用单列布局或任何其他布局。

有没有办法从内容页面告诉母版页使用内容页面中公共属性指定的布局。或任何其他处理这种情况的建议。

4

1 回答 1

1

要访问母版页中的控件,有两种方法:

通过公共属性和方法

如果您观察到,内容页面没有标题和标题标签。

因此,如果我们想修改内容页面的标题——这是强制性的——我们需要访问标题标签。

首先,我们需要更改标题标签,以便可以从代码页访问它。

很简单,我们需要添加 id 和 runat 属性如下:

<title id="sometitle" runat="server"></title>

然后,在母版页中,添加此属性:

public string SomeTitle
{
  set
  {
    sometitle.Text = value;
  }
}

最后在内容页面中,我们将这个片段添加到 Load 事件中。

MasterPage masterPage = MasterPage)this.Master;

masterPage.mainTitle = "你好世界";

请注意:

因为 Master 属性返回 MasterPage 类型的引用,所以我们需要将其转换为 MasterPage 类型。我们可以通过在内容页面中添加@MasterType 指令来避免这种情况,如下所示:

<%@ MasterType TypeName=" MasterPage " %>

MasterPage myMaster =this.Master;

我希望这会有所帮助。

于 2013-12-06T14:16:59.253 回答