2010-10-01 34 views
1

我想創建一個簡單的菜單系統使用中繼器。在系統中,我想爲類子項使用不同的格式,並試圖使用If檢查DataBinder結果和分支,如果它的「類」,但當我編譯代碼時說:爲什麼不會DataBinder.Eval工作

名稱「容器」未宣佈。

在所有的在線教程和MSDN上,Container.DataItem只是假設工作,所以我找不到任何有關它不工作的信息。任何使用數據綁定器的人都可以解釋這一點嗎?

<asp:Repeater ID="TopNavRepeat" runat="server" DataSourceID="SqlDataSource1" > 
      <HeaderTemplate> 
       <ul id="nav"> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <li> 
        <asp:HiddenField ID="LinkIdField1" Value='<%# Eval("id") %>' runat="server" 
          OnDataBinding="LinkIdField_ValueChanged" OnValueChanged="LinkIdField_ValueChanged"/> 
        <asp:HyperLink ID="HyperLink1" runat="server" Text='<%# Eval("Title") %>' NavigateUrl='<%# Eval("Url") %>' 
         ToolTip='<%# Eval("Description") %>'> 
        </asp:HyperLink> 
         <ul> 
         <!-- --> 
         <% If (CStr(DataBinder.Eval(Container.DataItem, "Title")) = "Classes")THEN %> 
         <asp:Repeater ID="ClassDownList" runat="server" DataSourceID="ClassDS"> 
          <HeaderTemplate></HeaderTemplate> 
          <ItemTemplate> 
          <li><asp:HyperLink ID="HyperLink1" runat="server" Text='<%# Eval("name") %>' NavigateUrl='<%# "/Class/" & helpers.urlSafe(CStr(Eval("name"))) %>' 
          ToolTip='<%# CStr(Eval("name")) & " home page" %>' /></li> 
          </ItemTemplate> 
          <FooterTemplate></FooterTemplate> 
         </asp:Repeater> 
         <% Else %> 
         <asp:Repeater ID="DropDownList" runat="server" OnLoad="ChildDataList_Init"> 
          <HeaderTemplate></HeaderTemplate> 
          <ItemTemplate> 
          <li><asp:HyperLink ID="HyperLink1" runat="server" Text='<%# Eval("Title") %>' NavigateUrl='<%# Eval("Url") %>' 
          ToolTip='<%# Eval("Description") %>' /></li> 
          </ItemTemplate> 
          <FooterTemplate></FooterTemplate> 
         </asp:Repeater> 
         <%End If %> 
         </ul> 
       </li> 
      </ItemTemplate> 
      <FooterTemplate> 
       </ul> 
      </FooterTemplate> 
     </asp:Repeater> 
+0

'Container.DataItem'應該在'<%# ... %>'塊中使用。 – Heinzi 2010-10-01 16:19:38

+0

當您使用<%#時,會導致編譯錯誤:預期表達式。 – 2010-10-01 17:48:33

回答

1

我覺得你不能使用<% If %>中繼

剛剛成立.Visible=False給他們一個在服務器端

或嘗試(不知道這是否有效)

<asp:Repeater Visible='<%# (CStr(DataBinder.Eval(Container.DataItem, "Title")) = "Classes") %>'> 
0

我不是VB的傢伙,但這是因爲你在做一個任務而不是比較?

<%# If (CStr(DataBinder.Eval(Container.DataItem, "Title")) = "Classes")THEN %> 

豈不是:

<%# If (CStr(DataBinder.Eval(Container.DataItem, "Title")) == "Classes")THEN %> 
+0

不,VB中的「=」總是表示*正確的東西*。 ;-)換句話說:表達式內的賦值是不可能的。 – Heinzi 2010-10-01 16:53:39