VB.net:从加载页面中的数据列表访问数据

VB.net:从加载页面中的数据列表访问数据,vb.net,Vb.net,是VB.net的新手,尝试将所有页面逻辑都发生在.aspx页面本身的“旧skool”ASP页面重新分解为代码隐藏。基本上,我有一个按钮,有一个状态,无论是开还是关。如果启用,则将隐藏字段设置为1,如果禁用,则将其设置为0(用户访问页面时的默认设置) 目标是简单地更改我发送给用户的消息 在MyPage.aspx中包含以下相关代码: <asp:HiddenField ID="hfldState" runat="server" Visible="false" Value="0" /> &

是VB.net的新手,尝试将所有页面逻辑都发生在.aspx页面本身的“旧skool”ASP页面重新分解为代码隐藏。基本上,我有一个按钮,有一个状态,无论是开还是关。如果启用,则将隐藏字段设置为1,如果禁用,则将其设置为0(用户访问页面时的默认设置)

目标是简单地更改我发送给用户的消息

MyPage.aspx
中包含以下相关代码:

<asp:HiddenField ID="hfldState" runat="server" Visible="false" Value="0" />

<div id="mainContent">
    <asp:Literal ID="lblMessage" runat="server" 
        Visible="false" />

    <asp:DataList ID="dlList" runat="server" 
        DataSourceID="sdsList"
        DataKeyField="Entry No_" 
        RepeatLayout="Flow">
        <ItemTemplate>
            <div>
                <asp:HyperLink ID="hlCurriculum" runat="server"  
                    Text='<%# DataBinder.Eval(Container.DataItem, "Title") %>'  
                    NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "File Path") %>'
                    ToolTip='<%# DataBinder.Eval(Container.DataItem, "Title") %>'
                    Target="_blank"
                    Style="font-weight: bold;">
                </asp:HyperLink>
            </div>
        </ItemTemplate>
    </asp:DataList>
</div> 

<asp:SqlDataSource ID="sdsList" runat="server" 
    ConnectionString="..." 
    SelectCommand="SELECT [Entry No_], [Title], [File Path] FROM [Table] WHERE ([State] = @State)">
    <SelectParameters>
        <asp:ControlParameter ControlID="hfldState" Name="State" Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>

以及页面_Load Sub中的以下内容:

If Page.IsPostBack Then
    ' Check for results
    dlList.DataBind()

    If dlList.Items.Count > 0 Then
        ' Results, display them
        lblMessage.Text = "<h3>Results</h3>"
        lblMessage.Visible = True
    Else
        ' No results
        lblMessage.Text = "<p>No Results</p>"
        lblMessage.Visible = True
    End If
Else
    ' user has not clicked anything
    lblMessage.Text = "<p>Click button!</p>"
End If
如果Page.IsPostBack那么
“检查结果
dlList.DataBind()
如果dlList.Items.Count>0,则
'结果,显示它们
lblMessage.Text=“结果”
lblMessage.Visible=True
其他的
“没有结果
lblMessage.Text=“无结果”
lblMessage.Visible=True
如果结束
其他的
'用户尚未单击任何内容
lblMessage.Text=“单击按钮!

” 如果结束
上面的代码产生了以下效果:当我单击按钮,将状态设置为1并重新加载页面时,在
page\u Load
中,如果dlList.Items.Count>0,我将从
中获得零结果,然后
检查,从而显示“无结果”消息,但是
MyPage.aspx
页面上的实际
asp:DataList
正在返回结果。。。然后,如果我再次单击按钮,将其设置回0,在
Page\u Load
中,数据列表现在将返回结果,因此我将文本设置为“results”,但同样,
MyPage.aspx
页面上的控件行为正常,没有显示预期的结果。现在请记住,如果我将
if dlList.Items.Count>0,然后将
页面逻辑移出page\u Load并返回
MyPage.aspx
文件,则上述方法在检查结果数量方面效果很好(即,当state=1时结果,当state=0时无结果)


有什么想法吗?

我在你的页面加载中没有看到回帖的检查:

If Not IsPostBack
 'code
  dList.DataBind() 'here is where you want to bind the data...
end if

这个问题与我对VB.net中页面生命周期的无知有关。解决方案是调整
asp:Literal
asp:DataList
,在
页面中设置值等。基本上,
asp:DataList
没有按预期在
Page\u Load
中设置,因此在
Page\u Load
中基于项目计数执行任何类型的逻辑都没有任何意义。

但是在这种情况下,无论是加载页面还是回发加载事件都不会检查这一点。您需要检查是否在回发邮件。抱歉,更新了代码以显示页面加载的完整代码-我确实在那里签了IsPostBack。@Paul-但您不想
而不是IsPostBack
?请仔细查看我的代码并与您的代码进行比较。否则,您将绑定任何回发。我是否不想仅在我已将某些内容发布到页面时绑定数据,在这种情况下,单击按钮设置状态?@Paul-当您的页面首次加载时,它不会被视为回发。如果初始隐藏字段(按钮值)为0,则当前的If条件将不会执行,这就是您想要的吗?完全正确。当页面加载时,我会显示一条“单击按钮”消息,然后当用户开始单击并切换状态时,我会检查该状态是否会从数据库中产生任何结果。