VB.net的新手,并试图重新考虑一个'old-skool'ASP页面,其中所有页面逻辑都发生在.aspx页面本身,代码隐藏。基本上,我有一个按钮,有一个状态,打开或关闭。如果选中,我将隐藏字段设置为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>
以下在Page_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
上面的代码产生以下效果:当我单击按钮,将状态设置为1并且页面重新加载时,在Page_Load
中,我从If dlList.Items.Count > 0 Then
检查得到零结果,因此我正在显示“无效果”消息,但asp:DataList
页面上的实际MyPage.aspx
正在返回结果...然后如果我再次点击该按钮,则将其重新设置为0,在{{1 ,datalist现在返回结果,所以我将文本设置为'Results',但同样,Page_Load
页面上的控件行为正确,并且没有按预期显示结果。现在请记住,如果我将MyPage.aspx
页面逻辑移出Page_Load并返回If dlList.Items.Count > 0 Then
文件,上面的结果可以完美地检查结果数量,这一切都正常(即结果时) state = 1,state = 0时无;
有什么想法吗?
答案 0 :(得分:1)
我没有看到您的页面加载检查回发:
If Not IsPostBack
'code
dList.DataBind() 'here is where you want to bind the data...
end if
答案 1 :(得分:0)
这个问题与我对VB.net中页面生命周期的无知有关。解决方案是调整asp:Literal
中asp:DataList
,Page_PreRenderComplete
,设置值等的可见性。基本上,asp:DataList
未按预期设置Page_Load
,因此根据项目计数在Page_Load
中执行任何类型的逻辑都没有任何意义。