ASP.NET母版页:页面加载时无法更新通知图标数字的问题求助
解决ASP.NET母版页通知数字无法更新的问题
看起来你遇到的问题主要是后台代码里的语法、逻辑错误导致的,我帮你梳理并修正一下:
首先修正前端代码的标签问题
你原前端代码存在标签闭合错误(多余的</Label>、未闭合的<td>),先调整为正确结构:
<li> <table border="0" align="left" cellpadding="7" cellspacing="7" style="margin-top:20px;" > <tr> <td class="auto-style1"> <div id="noti_Container"> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="../manage2.aspx"> <i class="fa fa-envelope-o fa-fw"></i> </asp:HyperLink> <div class="noti_bubble"> <asp:Label ID="Notifyme" runat="server" Text="7"></asp:Label> </div> </div> </td> </tr> </table> </li>
后台代码的核心错误修正
原后台代码有几个关键问题导致数字无法更新:
- C#是大小写敏感的,
readershifttime.hasrows需改为readershifttime.HasRows - ASP.NET Label控件的文本属性是
Text,不是innertext - 无需通过
noti_Container.FindControl查找Notifyme,它作为服务器控件可直接访问 - 数据库连接未用
using管理,易造成资源泄漏 - 代码块大括号不匹配,逻辑结构混乱
修正后的后台代码(放在母版页的Page_Load事件中):
protected void Page_Load(object sender, EventArgs e) { // 用using自动管理连接与资源,避免泄漏 using (SqlConnection CON = new SqlConnection(Testdb)) { CON.Open(); string ShiftTime = "SELECT count(discard) as alert FROM [Rejected].[dbo].[InQuestion] where discard = '0'"; using (SqlCommand ShiftTimecalculate = new SqlCommand(ShiftTime, CON)) { using (SqlDataReader readershifttime = ShiftTimecalculate.ExecuteReader()) { if (readershifttime.HasRows) { readershifttime.Read(); // 直接给Label的Text属性赋值查询结果 Notifyme.Text = readershifttime["alert"].ToString(); } // using块会自动关闭DataReader,无需手动调用Close() } } } }
额外注意事项
- 确保
Testdb是正确的数据库连接字符串,已在配置文件定义或代码中正确赋值 - 若母版页存在缓存,可能导致数字不更新,可在母版页的Page指令添加
<%@ OutputCache NoStore="true" Duration="0" VaryByParam="none" %>禁用缓存 - 确认
Notifyme控件的runat="server"属性存在,且在代码后置文件中可正常访问
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

