3

に問題がありusercontrolます。私は何時間もそれに取り組んできたので、今すぐ助けを求めなければなりません。

次のように、マークアップ ページからユーザー コントロールを呼び出した場合:

<uc7:MenuMain2 ID="MenuMain2" runat="server" RootCategoryId="4" ImageHeight="40"
                        ImageWidth="260" />

それは正常に動作します。


次のように呼び出すこともできます。

Control cont = LoadControl(@"../usercontrols/MenuMain2.ascx");
ContentPlaceHolder1.Controls.Add(cont );

それもうまくいきます。しかし、必要なプロパティを設定することもできません。


しかし、以下のコードのコードのようなプレースホルダーに呼び出すと、機能しません。ページの下部に投稿したエラーが表示されます。

Usercontrolコード ファイル - MenuMain.ascx.cs:

public partial class MenuMain2 : System.Web.UI.UserControl {

 public int ActiveCategoryId { get; set; }
 public int RootCategoryId { get; set; }
 public int articleID = 0;
 public int ImageWidth ;
 public int ImageHeight ;

  protected void Page_Load(object sender, EventArgs e) {
        if (!Page.IsPostBack)
            BindData();
    }

    private void BindData() {
        CategoriesService catSvc = new CategoriesService();
        if (ActiveCategoryId == 0) {
            if (articleID > 0) {
                M02ArticlesService artSvc = new M02ArticlesService();
                List<M02ArticlesEntity> artList = artSvc.FindById(articleID);
                if (artList.Count > 0)
                    ActiveCategoryId = artList.First().CategoryId;
            }
        }
        List<CategoriesEntity> catList = new List<CategoriesEntity>();
        catList = catSvc.GetPublishedByParentCategoryId(RootCategoryId);
        ViewState.Add("ActiveCategoryId", ActiveCategoryId);
        Repeater1.DataSource = catList;
        Repeater1.DataBind();
    }
}

の分離コードMasterpage:

        public HttpCookie authCookie;
        public FormsAuthenticationTicket ticket;
        private string name;
        private MenuMain2 mn;

        protected void Page_Load(object sender, EventArgs e)
        {
            mn = new MenuMain2 {RootCategoryId = 4,ImageHeight = 100, ImageWidth = 260}
            //Control cont = LoadControl(@"../usercontrols/MenuMain2.ascx");

            if (Request.Cookies[".ASPXAUTH"] != null)
            {
                authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
                ticket = FormsAuthentication.Decrypt(authCookie.Value);
                name = ticket.Name;
            }

            if (name != null)
            {
                if (name.Equals("Jhon"))
                {
                    mn.RootCategoryId = 1;
                }
                if (name.Equals("Bob"))
                {
                    mn.RootCategoryId = 2;
                }
                if (name.Equals("Tom"))
                {
                    mn.RootCategoryId = 3;
                }
            }

            ContentPlaceHolder1.Controls.Add(mn);
            CategoriesEntity cat;
            int catId = Request.GetCategoryId();

            if (catId > 0)
            {
                cat = new CategoriesService().GetById(catId);
                if (cat != null && cat.RequireLogin && Request.Url.LocalPath != "/login.aspx")
                {
                    if (!view_M06PersonsCategoriesService.HasAccess(HttpContext.Current.User.Identity.Name, catId))
                    {
                        Response.Redirect(string.Format("~/login.aspx?ReturnUrl={0}&qs={1}&CatId={2}{3}",
                                                         Server.UrlEncode(Request.Url.LocalPath),
                                                         Server.UrlEncode(Request.Url.Query),
                                                         Request.QueryString["CatId"],
                                                         Request.QueryString["ArtId"].IsEmpty() ? String.Empty : "&ArtId=" + Request.QueryString["ArtId"]));
                    }
                }
            }

            if (!Page.IsPostBack)
            {
                litAdmin.Text = ConfigurationManager.AppSettings["WebName"].ToString();
                string url = Request.ServerVariables["URL"].ToString();
                if (url.ToLower().StartsWith("/default.aspx"))
                    GetPhotoalbum();
            }
        }
      }
    }

エラー メッセージ - アプリの 42 行目はこれです -- Repeater1.DataSource = catList;--

`Object reference not set to an instance of an object.`

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.]
   No.Itl.Web.WebApplication.usercontrols.MenuMain2.BindData() in e:\WorkFolder\usercontrols\MenuMain2.ascx.cs:42
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +24
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +41
   System.Web.UI.Control.OnLoad(EventArgs e) +131
   System.Web.UI.Control.LoadRecursive() +65
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Control.LoadRecursive() +190
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2427
4

1 に答える 1

1

これを試して:

MenuMain2 mn = (MenuMain2)LoadControl(@"../usercontrols/MenuMain2.ascx");

....

if (name != null)
{
    if (name.Equals("Jhon"))
    {
        mn.RootCategoryId = 1;
    }
    if (name.Equals("Bob"))
    {
        mn.RootCategoryId = 2;
    }
    if (name.Equals("Tom"))
    {
        mn.RootCategoryId = 3;
    }
}

UserControl をロードしていますが、 incontのタイプを定義し、ロードされていないオブジェクトを追加しています。MainMenu2mn

于 2013-01-16T23:56:00.257 に答える