1

私は ASP.net の初心者で、アプリケーション全体で一般的に使用されるメソッドを含むクラス ファイルを作成したいと考えています。とページで特定ButtonLinkのを隠しているここのようなものです。login.aspxregistration.aspx

しかし、これらのページのいずれかを開始すると、次のエラーが発生します。

Object reference not set to an instance of an object.

これが私のコードです:

Helper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public class Helper : System.Web.UI.Page
    {
        public void hideLinks(){
            // error is produced at the following line at the start of
            // login.aspx or registration.aspx pages.
            LinkButton profile = (LinkButton)Master.FindControl("LinkButton1");
            LinkButton logout = (LinkButton)Master.FindControl("LinkButton2");

            profile.Visible = false;
            logout.Visible = false;
        }        
    }
}

login.aspx.cs& registration.aspx.cs:

void Page_PreInit(object sender, EventArgs e)
{
   //LinkButton profile = (LinkButton)Master.FindControl("LinkButton1");
   //LinkButton logout = (LinkButton)Master.FindControl("LinkButton2");

   //profile.Visible = false;
   //logout.Visible = false;
   Helper master_helper = new Helper();
   master_helper.hideLinks();
}
4

1 に答える 1

2

new のインスタンスHelper化 (つまり、 new System.Web.UI.Page) はフル ページ リクエストの一部として存在しないため、同じものへの参照はありませんMaster(存在する場合でも)。代わりに、 (または)Helperを取るように再設計してください:MasterPage

public class Helper
{
    private Page AssociatedPage;

    public Helper(Page page)
    {
        this.AssociatedPage = page;
    }

    public void hideLinks(){
        // error is produced at the following line at the start of
        // login.aspx or registration.aspx pages.
        LinkButton profile = (LinkButton)AssociatedPage.Master.FindControl("LinkButton1");
        LinkButton logout = (LinkButton)AssociatedPage.Master.FindControl("LinkButton2");

        profile.Visible = false;
        logout.Visible = false;
    }        
}

次に、使用法は次のようになります。

void Page_PreInit(object sender, EventArgs e)
{
   Helper master_helper = new Helper(this);
   master_helper.hideLinks();
}

メソッドを静的に再設計し、Page(またはMaster) 参照をhideLinks引数としてメソッドに渡すこともできますが、これはあなた次第です。

于 2012-11-30T16:25:38.017 に答える