我是新来的Asp.net,我目前正试图将一个html页面转换为一个asp.net网站。导航可以很好的与CSS结合使用,并使用无序列表来填充。创建一个从数据库中提取的导航列表视图
<ul class="menu" id="responsive">
<li><a href="General.aspx" runat="server" id="currentGeneral"><i class="home"></i> Overview</a></li>
<li><a href="Calendarized.aspx" runat="server" id="currentCalendarized" ><i class="calendar"></i> Calendar</a></li>
</ul>
现在我正在转移到asp.net,并根据谁登录,导航会改变。
在我的Site.Master创建
<asp:ListView ID="ListViewMenu" runat="server">
<LayoutTemplate>
<ul class="menu" id="responsive" runat="server">
<asp:PlaceHolder ID="menuContainer" runat="server" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<li><a href="<%#Eval ("href") %>" runat="server" id="<%#Eval ("id") %>"><i class="<%#Eval ("class") %>"></i><%#Eval ("text") %></a></li>
</ItemTemplate>
</asp:ListView>
然后我创建了一个存储过程,将拉我需要根据用户该表。
ID href id class text
1 general.aspx currentGeneral home overview
然后在Site.Master.cs页面我创建了一个类来填充上page_PreRender
void PopulateMenu()
{
DataAccess da = new DataAccess();
da.AddParameter("ID", ID, DataAccess.SQLDataType.SQLInteger, 4);
SiteMenu = da.runSPDataSet("Portal_MenuCreate");
ListViewMenu.DataSource = SiteMenu;
ListViewMenu.DataBind();
}
菜单我想这会工作,但即时得到以下
Parser Error: The server tag is not well formed.
<li><a href="<%#Eval ("href") %>" runat="server" id="<%#Eval ("id") %>"><i class="<%#Eval ("class") %>"></i><%#Eval ("text") %></a></li>
任何人都知道我做错了什么,也许这不是最好的办法吗?感谢您的任何见解。
编辑--- 原因ID-currentGeneral和RUNAT“服务器”,是因为与模板,我需要将ID设置为当前如果当前页面(改变标签颜色)
switch (pageName)
{
case "General.aspx":
currentGeneral.Attributes["class"] = "active";
break;
case "Calendarized.aspx":
currentCalendarized.Attributes["class"] = "active";
break;
ID不会像普通控件的ID一样工作,因为它在ItemTemplate中,所以+1跳过它。 – Graham 2013-04-11 20:22:18
好的,那么我将不得不改变我如何使用ID。我编辑我的文章,但id-currentGeneral和runat“服务器”的原因是因为如果模板的当前页面(改变标签颜色),我需要将ID设置为当前。 – Zach 2013-04-11 20:26:46
好吧,我明白这个改变。谢谢你澄清。我确实收到了一个新的错误。项目占位符必须在ListView'ListViewMenu'上指定。通过将控件的ID属性设置为“itemPlaceholder”来指定项目占位符。项目占位符控件还必须指定runat =“server”。对于我的ListViewMenu.Databind(); – Zach 2013-04-11 20:32:13