希望您今天在开展任何项目时都有一个良好的开端。我今天开始讨论一个有趣的问题,我需要解决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查询字符串中使用它?
很抱歉,如果这令人困惑,我很乐意在需要时进一步详细说明。
答案 0 :(得分:2)
应该在这里解决一些事情:
"Server tag not well formed"
是由于在ConnectionString
属性后错过了双引号。<%# %>
内的所有内容都必须是有效的C#代码,这意味着如果您使用的是字符串,则应将其括在双引号中。这里引用的典型模式是AttributeName='<%# Eval("Property")%>'
。 SelectCommand
值不是这种情况。总而言之,结果如下:
<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
值。