如何从母版页中的代码后面将项目动态添加到项目符号列表中

时间:2018-10-01 09:03:05

标签: asp.net master-pages

我的主页上有一个项目符号列表,定义如下:

<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
   <ul class="nav navbar-nav">
        <li>
            <asp:LinkButton ID="btnHome" runat="server" class="active" CausesValidation="false">Home </asp:LinkButton>
        </li>
        <li>
            <asp:BulletedList ID="headerMenu" DisplayMode="LinkButton" class="nav navbar-nav" CausesValidation="false" runat="server">
            </asp:BulletedList>
        </li>
   </ul>
</div>

现在,我正尝试从内容页面(母版的子项)“ _ Default.cs”访问它,并向其中添加一些项目。以下是我已经尝试过的方法,但是由于出现错误 'System.Web.UI.WebControls.BulletedList'不允许使用子控件。

public partial class _Default : System.Web.UI.Page {
    protected void Page_Load(object sender, EventArgs e) {
        if (!IsPostBack) {
            LinkButton mybl = new LinkButton();
            mybl.Text = "my item";
            BulletedList Bl = (BulletedList)Master.FindControl("headerMenu");
            if (Bl != null) {
                Bl.Controls.Add(mybl);
            }

        }
    }

}

如何动态更改母版页并从子内容页面修改BulletedList?

1 个答案:

答案 0 :(得分:1)

BulletedList不允许出现子控件,因为BulletedList不支持通常使用Controls.Add()方法设置的模板控件。这是BulletedList.Controls属性的说明:

  

Controls属性是从Control类继承的,不是   适用于BulletedList控件。

相反,您需要使用Items.Add()方法将ListItem项添加到ListItemCollection中,假设BulletedList存在于母版页中:

if (!IsPostBack) {
    headerMenu.Items.Add(new ListItem("my item"));
}

如果要将项目文本与URL一起,请将URL作为ListItem的第二个参数:

if (!IsPostBack) {
    headerMenu.Items.Add(new ListItem("my item", "http://path/to/url"));
}

参考:BulletedList Class