【问题标题】:asp:DataList control with asp:LinkButton inside - something's weirdasp:DataList 控件,内部带有 asp:LinkBut​​ton - 有点奇怪
【发布时间】:2009-05-14 19:01:02
【问题描述】:

我正在研究一本试图学习 ASP.NET 的书中的示例,但我偶然发现了一些奇怪的东西。首先,如果我按照书中的内容输入,VS 会给我错误。这是书中写的代码:

    <asp:DataList ID="employeesList" runat="server">
    <ItemTemplate>
        <asp:Literal ID="extraDetailsLiteral" runat="server" EnableViewState="false" />
        Name: <strong><%#Eval("Name") %></strong><br />
        Username: <strong><%#Eval("Username") %></strong><br />
        <asp:LinkButton ID="detailsButton" runat="server" Text=<%#"View more details about " + Eval("Name")%> 
            CommandName="MoreDetailsPlease" 
            CommandArgument=<%#Eval("EmployeeID")%> />
    </ItemTemplate>
    <SeparatorTemplate>
        <hr />
    </SeparatorTemplate>
</asp:DataList>

所以,我已经研究了一段时间,并提出了这个实际编译的解决方案:

    <asp:DataList ID="employeesList" runat="server" onitemcommand="employeesList_ItemCommand">
    <ItemTemplate>
        <asp:Literal ID="extraDetailsLiteral" runat="server" EnableViewState="false" />
        Name: <strong><%#Eval("Name") %></strong><br />
        Username: <strong><%#Eval("Username") %></strong><br />
        <asp:LinkButton ID="detailsButton" runat="server" Text='View more details about <%# Eval("Name") %>' 
            CommandName="MoreDetailsPlease" CommandArgument='<%Eval("EmployeeID") %>' />
    </ItemTemplate>
    <SeparatorTemplate>
        <hr />
    </SeparatorTemplate>
</asp:DataList>

请注意,我还在 asp:DataList 标记中添加了 OnItemCommand,所以现在我可以按预期触发事件了。

但是,浏览器中的结果不是我所期望的; strong text 中列出的名称和用户名显示得很好,但应该显示额外详细信息的文字控件(EmployeeID 字段)和 LinkBut​​ton 内的名称字段不会在页面中显示它们的值:

not showing as expected http://lh6.ggpht.com/_x84bQLYH57A/SgxzygartcI/AAAAAAAAAIY/nhT-6RUJa6o/s144/EmployeeDirectory_notshowing.jpg

应该说“EmployeeID:1”和“查看有关 Zak Ruvalcaba 的更多详细信息”

我猜是 Eval 函数在另一个控件中不起作用,有人可以帮我吗?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    将链接按钮更改为:

    <asp:LinkButton ID="detailsButton" runat="server" 
         Text='<%# Eval("Name", "View more details about {0}") %>' 
         CommandName="MoreDetailsPlease" 
         CommandArgument='<%# Eval("EmployeeID") %>' />
    

    对不起,我混淆了参数的顺序。我更新了我的答案。格式必须是第二个参数。

    【讨论】:

    • 此解决方案导致应用程序崩溃,说 DataBinding:“System.Data.Common.DataRecordInternal”不包含名为“查看有关 {0} 的更多详细信息”的属性。你能再看一遍吗?我希望这是这样做的方法,因为它看起来相当优雅。 :)
    • 半个点用于发现 CommandArgument 中缺少的 #.. ;)
    • 我正在为您的更新解决方案提供答案,因为恕我直言,它更优雅。但是 TheTXI 对此也有一个有趣的看法,所以我支持他。希望我做对了,我是新手!谢谢大家的回复!
    • @tplive:欢迎来到 SO!是的,鼓励人们给出好的答案。 TheTXI 的答案比较简单。但我喜欢这个,因为在这个中格式化货币日期和小数更容易:)
    【解决方案2】:

    您可以在此处查看我昨天发布的另一个问题,该问题与惊人的相似之处:

    Need help with Eval inside DataList

    我确实相信 Canavar 实际上给出了正确的答案。

    【讨论】:

    • 您的链接很有趣,我不知道 Eval 的返回是一个对象,但是当我应用您的解决方案时,如下所示: Text='' 它就像一个魅力!
    • tplive:如果有帮助,请随时投票给我(也许我最初的问题也是如此):)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2010-12-09
    • 2018-12-24
    相关资源
    最近更新 更多