VB.net:从Page_Load中的DataList访问数据

时间:2011-07-29 15:25:35

标签: vb.net

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时无;

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我没有看到您的页面加载检查回发:

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

答案 1 :(得分:0)

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