2013-04-11 69 views
1

我是新来的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; 

回答

2

你不能有id="<%#Eval ('id') %>"runat="server"

<li><a href='<%#Eval ("href") %>' runat="server" id="HyperLink1"> 
    <i class='<%#Eval ("class") %>'></i><%#Eval ("text") %></a></li> 

如果您未在服务器端访问该超链接,则甚至不需要runat="server"id。如果是这样,删除这两个让你的代码干净 -

<li><a href='<%#Eval ("href") %>' class='<%#Eval ("id") %>'> 
    <i class='<%#Eval ("class") %>'></i><%#Eval ("text") %></a></li> 

FYI:如果你需要的CSS样式,使用class而不是id

+0

ID不会像普通控件的ID一样工作,因为它在ItemTemplate中,所以+1跳过它。 – Graham 2013-04-11 20:22:18

+0

好的,那么我将不得不改变我如何使用ID。我编辑我的文章,但id-currentGeneral和runat“服务器”的原因是因为如果模板的当前页面(改变标签颜色),我需要将ID设置为当前。 – Zach 2013-04-11 20:26:46

+0

好吧,我明白这个改变。谢谢你澄清。我确实收到了一个新的错误。项目占位符必须在ListView'ListViewMenu'上指定。通过将控件的ID属性设置为“itemPlaceholder”来指定项目占位符。项目占位符控件还必须指定runat =“server”。对于我的ListViewMenu.Databind(); – Zach 2013-04-11 20:32:13

-1

尝试使用单引号让你的双引号被正确识别

<li><a href="<%#Eval ('href') %>" runat="server" id="<%#Eval ('id') %>"><i class="<%#Eval ('class') %>"></i><%#Eval ('text') %></a></li> 
+0

我试过,但在<%#的eval( '类') %>和<%#Eval('text')%>表示“字符文字中的字符太多”。 – Zach 2013-04-11 20:10:54

+0

'Eval('href')'是一个C#表达式。这是一个名为'Eval'的方法,它需要一个字符串。如果你通过''href''你传递了一个无效的char引用(因为单引号是用于字符而字符用单个字符组成) – 2013-04-11 20:21:48

相关问题