0

希望您今天在从事的任何项目上都有一个良好的开端。我今天从一个有趣的问题开始,我需要解决涉及 ASP.net 中的嵌套中继器(从 SQL 数据库中获取数据以构建与教育和福利相关的赠款数据的网页结果)。

我有一个转发器,它使用 SQL 查询根据我的 SQL 表中的特定列(类别列)拉回数据:

<asp:SqlDataSource ID="SqlDataSourceGrantCategories" runat="server" 
ConnectionString="<%$ ConnectionStrings:KenticoCMSECommerceTestingConnectionString %>" 
SelectCommand="SELECT * FROM [customtable_SampleTable] ORDER BY Category">
</asp:SqlDataSource>

现在我想要一个额外的嵌套转发器,它有另一个向它提供数据的查询,但是这个内部转发器基于第一个转发器提取的 Category 列(来自 SQL 表)的查询。这是我到目前为止所拥有的:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSourceGrantCategories">
  <ItemTemplate>
  <%# Eval("Category") %> //I just need this piece of data, but used below.
  <br />
      <asp:Repeater ID="Repeater2" runat="server" DataSourceID="SqlDataSourceGrantInfo">
      <asp:SqlDataSource ID="SqlDataSourceGrantInfo" runat="server" ConnectionString="<%$ ConnectionStrings:KenticoCMSECommerceTestingConnectionString %>
    SelectCommand="SELECT * FROM [customtable_SampleTable] WHERE Category = <%# Eval('Category') %>">
    <ItemTemplate>
    <%# Eval("Title") %>
    </ItemTemplate>
  </asp:Repeater>
  <br />
  </ItemTemplate>
</asp:Repeater>

所以基本上,第二个嵌套的 SqlDataSource 内部的 Eval 语句没有被正确评估,它给我一个错误,上面写着“服务器标记格式不正确”。有什么方法可以让我使用或使变量等于第一个 Eval("Category") 语句,然后我可以在我的第二个 SQL 查询字符串中使用它?

抱歉,如果这令人困惑,如果需要,我很乐意进一步详细说明。

4

1 回答 1

2

这里应该修复的几件事:

  1. 该错误"Server tag not well formed"是由于缺少ConnectionString属性后的双引号引起的。
  2. 请记住,里面的所有内容都<%# %>必须是有效的 C# 代码,这意味着如果您使用的是字符串 - 您应该将其括在双引号中。这里引用的典型模式是AttributeName='<%# Eval("Property")%>'. 在SelectCommand价值方面并非如此。
  3. 当您需要同时处理文字和绑定数据时,例如此处的选择查询,最好将整个表达式包含在 servlet 标记中并在其中执行必要的转换。

总而言之,结果如下:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSourceGrantCategories">
    <ItemTemplate>
        <%# Eval("Category") %>
        <br />
        <asp:SqlDataSource ID="SqlDataSourceGrantInfo" runat="server" ConnectionString="<%$ ConnectionStrings:KenticoCMSECommerceTestingConnectionString %>"
            SelectCommand='<%# "SELECT * FROM [customtable_SampleTable] WHERE Category =" + Eval("Category") %>' />
        <asp:Repeater ID="Repeater2" runat="server" DataSourceID="SqlDataSourceGrantInfo">
            <ItemTemplate>
                <%# Eval("Title") %>
            </ItemTemplate>
        </asp:Repeater>
        <br />
    </ItemTemplate>
</asp:Repeater>

SelectParameters最后,出于多种原因,使用而不是Category直接将值插入查询会更好。

于 2013-07-26T14:46:48.693 回答