1
 public partial class MasterPage : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if(System.Web.HttpContext.Current.User.Identity.Name != "") //if (!Page.IsPostBack)
            {
                BusinessLayer.ShoppingCart cart = new BusinessLayer.ShoppingCart();
                int count = cart.getNoOfProducts(System.Web.HttpContext.Current.User.Identity.Name);
                Label lblCart = (Label)Master.FindControl("lblCartNo");
                lblCart.Text = " (" + count + ")";
            }
        }
    }

我放置了一个断点并且永远不会调用此代码(即使没有 if 语句),我也无法找到位于母版页中的标签

4

2 回答 2

3

为了调用 Page_Load,请确保在 MasterPage.aspx 中有 AutoEventWireup="true":

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="Mysite.Website.Templates.MasterPages.Site" %>

确保 MasterPage.aspx Inherits 属性与您的代码隐藏命名空间和类名以及 .designer.cs 命名空间和类匹配。

如果 aspx 和代码隐藏文件都正确连接,那么您应该能够删除 FindControl 语句。

于 2013-01-10T17:31:10.220 回答
0

您的母版页的 Page_Load 事件肯定应该被触发。不知道为什么你的断点没有被击中,但要仔细检查,我建议尝试一些更暴力的东西,以确保绝对没有调用该方法:

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Page_Load");
    Response.End();
}

由于控件嵌套的方式,可能找不到您的标签,因为 Master.FindControl 如果控件位于另一个控件中,则将不起作用。我建议查看“在嵌套母版页中查找控件”,它有一个有用的帮助方法,可用于递归搜索控件。

于 2013-01-10T17:21:49.770 回答