VB.net:从加载页面中的数据列表访问数据
是VB.net的新手,尝试将所有页面逻辑都发生在.aspx页面本身的“旧skool”ASP页面重新分解为代码隐藏。基本上,我有一个按钮,有一个状态,无论是开还是关。如果启用,则将隐藏字段设置为1,如果禁用,则将其设置为0(用户访问页面时的默认设置) 目标是简单地更改我发送给用户的消息 在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" /> &
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条件将不会执行,这就是您想要的吗?完全正确。当页面加载时,我会显示一条“单击按钮”消息,然后当用户开始单击并切换状态时,我会检查该状态是否会从数据库中产生任何结果。