2013-04-11 54 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

相關問題