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

How to dynamically add items to bulleted list from code-behind in the master page

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

<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?

BulletedList 不允许子控件 发生是因为BulletedList 不支持通常使用Controls.Add() 方法设置的模板控件。这是来自 BulletedList.Controls 属性 的评论:

The Controls property is inherited from the Control class and is not applicable to the BulletedList control.

相反,您需要使用 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