2

我正在尝试创建一个自定义上下文菜单作为用户控件。此用户控件的代码如下所示:

public partial class UCContextMenu : UserControl
{
    private List<ContextMenuItem> m_menuItems = new List<ContextMenuItem>();

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    [PersistenceMode(PersistenceMode.InnerProperty)]
    public List<ContextMenuItem> Items
    {
        get { return m_menuItems; }
        set { m_menuItems = value; }
    }

    public event EventHandler Command;
}

然后,我在与用户控件相同的命名空间ContextMenuItem中定义了类型(实际上在同一个文件中),它本质上是一个菜单项:

public class ContextMenuItem
{
    public string Name { get; set; }

    public string Text { get; set; }
}

用户控件的ascx页面包含一个repeater定义如下的控件:

<div id="contentHolder">
    <ul id="ulContextMenu" style="display: none; z-index: 1000; border-width: 0.8px;
        font-size: 13px;" class="ui-corner-all">
        <asp:Repeater runat="server" DataSource="<%# Items %>">
            <ItemTemplate>
                <li><a href='#<%# DataBinder.Eval(Container.DataItem, "Name") %>'>
                    <%# DataBinder.Eval(Container.DataItem, "Text") %></a>
                </li>
            </ItemTemplate>
        </asp:Repeater>
    </ul>
</div>

最后在注册后在页面中使用它,我有:

<uc:ContextMenu runat="server" OnCommand="SomeMethod">
    <Items>
       <uc:ContextMenuItem Name="SomeName" Text="SomeText" />
    </Items>
</uc:ContextMenu>

现在,当我运行它时,我NullReference在线收到一个解析错误

<uc:ContextMenuItem Name="SomeName" Text="SomeText" />

不运行时,Visual Studio 还说Element 'ContextMenuItem' is not a known element.它在运行时也没有捕获异常,所以也许这样我可以查看堆栈跟踪以了解发生了什么。我只是想知道是否有人遇到过类似的问题。任何帮助表示赞赏。

4

1 回答 1

0

创建ContextMenuItem为普通用户控件。您在与您强调的相同的名称空间中定义它的事实对您没有任何帮助。因此,只需将 ContextMenuItem.ascx 添加到您的项目中,然后在页面或其他控件上注册并添加控件。

于 2014-08-21T23:24:15.597 回答