EPiServer: CS1061: "System.Web.UI.Control" не содержит определения "CurrentPage"...?
Возникла небольшая проблема с этой ошибкой EPIServer: CS1061: "System.Web.UI.Control" не содержит определения для "CurrentPage" и не имеет метода расширения "CurrentPage", принимающего первый аргумент типа "System.Web.UI.Control". 'может быть найдено (вам не хватает директивы using или ссылки на сборку?)
когда я пытаюсь получить доступ к методу с параметром из моего файла ascx. Файл ascx:
<div id="nav">
<ul role="menu">
<li <%# GetMenuClass(Container.CurrentPage)%> role="menuitem">
<%= GetNewsPage %>
<%--<a href="#">News</a>--%>
</li>
<li <%# GetMenuClass(Container.CurrentPage) %> role="menuitem">
<%= GetClientPage %>
<%--<a href="#">Clients</a>--%>
</li>
</ul>
</div>
Метод в коде:
protected string GetMenuClass(PageData page)
{
if (page.IsSelected(CurrentPage))
{
return "class=\"menu-item selected\"";
}
return "class=\"menu-item\"";
}
что я хочу достичь, это что-то вроде этого (если выбрана страница новостей):
<div id="nav">
<ul role="menu">
<li class="menu-item selected" role="menuitem"> News </li>
<li class="menu-item" role="menuitem">
<a href="#">Clients</a>
</li>
</ul>
</div>
</nav>
Я рад, если кто-то может помочь.
2 ответа
Похоже, тип свойства Container - System.Web.UI.Control. Я не уверен, что такое контейнер в вашем случае, но похоже, что вам нужно привести его к соответствующему конкретному типу, такому как EPiServer.UserControlBase, EPiServer.PageBase или EPiServer.Web.WebControls.PageControlBase. Эти типы содержат свойство CurrentPage, которое является PageData.
Я отмечаю, что вы используете синтаксическое выражение привязки (<<# #) и используете контейнер, так что я предполагаю это в элементе управления с привязкой к данным, например, в повторителе?
Если это так, попробуйте изменить ваш вызов GetMenuClass следующим образом
GetMenuClass((PageData)Container.DataItem)
при условии, что вы связали коллекцию объектов PageData с ретранслятором