我有一个WebForms应用程序。除其他外,它具有搜索框,转发器和标签totalItems,该标签显示转发器中项目的计数。根据输入到Search控件中的文本,在从Page_Init()方法调用的方法中填充转发器。出于某种原因,如果我在搜索控件中什么都没有运行应用程序,然后在搜索控件中第二次使用文本运行,则中继器的内容会相应更改,但是totalItems标签不会更新。我调试了它,知道totalItems.Text设置为正确的值。
代码如下:
在.aspx中:
<div class="col-md-6">
<div class="makeblock">
<asp:Label ID="totalItems" CssClass="totalItems" Runat="server"></asp:Label>
</div>
</div>
在.aspx.cs中:
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
InitializeComponent()
If Not IsNothing(Request.QueryString("group")) Then
buildTable(CInt(Request.QueryString("cat")), CInt(Request.QueryString("group")), CurrentPage)
End If
End Sub
Sub buildTable(ByVal itemCat As Integer, ByVal itemGroup As Integer, Optional ByVal pageNo As Integer = 1)
...
totalItems.Text = "Total Items: " & numItems.ToString()
...
itemRepeater.DataSource = pageds
itemRepeater.DataBind()
End Sub
答案 0 :(得分:0)
总结评论和讨论中的一些建议:
通常来说,您应该使用Page_Load()
方法,因为它可以确保正确加载所有页面控件。此外,您应该通过检查Page_Load()
属性来保护IsPostBack
方法,以防止在处理其他事件(例如来自Repeater
的事件)时意外重新填充OnItemCommand
中继器本身。
为帮助改进体系结构并可能揭示某些事情未按预期进行更新的原因,我建议您将数据库操作,转发器填充和标签更新分为不同的方法。然后有一个将它们组合在一起的方法,并按适当的顺序调用它们。
对于分页转发器...转发器是一个非常基本的控件,需要大量的工作才能使用...执行Web窗体事件生命周期,即使最有经验的人也可能会因此受苦。我的建议是研究有关使用转发器或网络上其他资源进行自定义分页的其他SO问题,以确保您不会陷入精神错乱的道路。您可能会发现DataGrid
之类的东西可以完成工作,尽管它的输出和格式被认为是有用的。