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 に答える