为什么 DataBinder.Eval 不起作用

发布于 2024-09-25 21:44:50 字数 2802 浏览 8 评论 0原文

我正在尝试使用中继器创建一个简单的菜单系统。在系统中,我想对类子项使用不同的格式,并尝试使用 If 来检查 DataBinders 结果并分支它的“类”,但当我编译代码时显示:

未声明名称“容器”。

在所有在线教程和 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>

I am trying to create a simple menu system using repeaters. In the system I want to use a different formatting for class sub items and am trying to use an If that checks the DataBinders results and branches if its "Classes" but when I compile the code is says:

Name "Container" not declared.

On all the tutorials online and MSDN the Container.DataItem is just assumed to work so i can't find any information on it not working. Can anyone who uses databinders more than me explain this?

<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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小猫一只 2024-10-02 21:44:50

我认为你不能使用 <% If %> inside 中继器,

只需将 .Visible=False 设置为服务器上的其中一个侧面

或尝试(不确定这是否有效)

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

i think u can't use <% If %> inside a repeater

just set .Visible=False to one of them on server side

or try (not sure if this works)

<asp:Repeater Visible='<%# (CStr(DataBinder.Eval(Container.DataItem, "Title")) = "Classes") %>'>
很快妥协 2024-10-02 21:44:50

我不是VB人,但这是因为你正在做作业,而不是比较吗?

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

不应该是:

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

I'm not a VB guy, but is it because you're making an assignment, rather than a comparison?

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

Should it not be:

<%# If (CStr(DataBinder.Eval(Container.DataItem, "Title")) == "Classes")THEN %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文