怪异的转发器问题

lop*_*iju 0 c# asp.net

我的aspx页面中有一个Repeater控件:

<asp:Repeater ID="repeater" runat="server" EnableViewState="false">
    <ItemTemplate>
        <%# Eval("someAttribute") %>
    </ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)

在Page_Load上我有以下代码:

if (String.IsNullOrEmpty((string)Request.QueryString["action"]))
    s.OpenConn("SELECT * FROM someTable;");
else
    s.OpenConn("SELECT * FROM someTable WHERE id=1;");

if (s.Read())
{
    repeater.DataSource = s.GetRead();
    repeater.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我输入?action = something时,页面上不会显示数据.但如果我删除?action = something,我会得到所有数据.

难道我做错了什么?

3Da*_*ave 5

看起来像您的查询

 s.OpenConn("SELECT * FROM someTable WHERE id=1;");
Run Code Online (Sandbox Code Playgroud)

没有回来任何东西.或者,您的#Eval语句返回一个空字符串.将此更改为

<ItemTemplate>
    <%#Eval("SomeAttribute")%> I found one!
</ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

如果转发器的.DataSource属性不是空列表,请确保获得一些输出.这样,"我找到了一个!" 即使"SomeAttribute"为空,也会显示.

提示:

  1. 从来没有,EVER EVER直接在.ASPX.cs中嵌入查询.使用的存储过程或(叹气)参数化查询.

  2. 此外,不要在代码隐藏页面中进行任何数据库交互.将您的数据访问重构为一个单独的类.你以后感谢我的.谷歌针对n层架构,单元测试或关注点分离进行更详细的分析.

  3. 您不需要将.QueryString []值强制转换为字符串.他们已经是弦乐了.

  4. 设置断点

    if(s.Read())

看看你到达那里会发生什么.这有助于您找到问题所在.