-1

c_LOB、c_Projectname、c_countryname、c_releasename という名前の 4 つのコンボボックスを持つホームページがあります。

現在、これらのコンボ ボックスの有効なプロパティに基づいてツールチップを変更しようとしています。以下は、C# と asp.net を使用して Visual Studio 2010 で記述されたコードです。

namespace GPTRGT
{
public partial class Homepage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        UserIdentification();
    }
    public void UserIdentification()
    {
        c_LOB.Items.Clear();
        c_LOB.Items.Add("RUSA");
        c_LOB.Items.Add("RETAIL");
        c_LOB.Items.Add("CARDS");
        if (c_CountryName.Enabled == false)
        {
            c_CountryName.ToolTip = "Please select your LOB first.";
        }
        else
        {
            c_CountryName.ToolTip = "Please select your Country name.";
        }

        if (c_ProjName.Enabled == false && c_CountryName.Enabled == false)
        {
            c_ProjName.ToolTip = "Please select you LOB and Country name first.";
        }
        else if (c_ProjName.Enabled == false)
        {
            c_ProjName.ToolTip = "Please select your Country name first.";
        }
        else
        {
            c_ProjName.ToolTip = "Please select your Project name.";
        }

        if (c_ProjName.Enabled == false && c_CountryName.Enabled == false && c_ProjName.Enabled == false)
        {
            c_ReleaseName.ToolTip = "Please select your LOB, Country name & Project name first";
        }
        else if (c_CountryName.Enabled == false && c_ProjName.Enabled == false)
        {
            c_ReleaseName.ToolTip = "Please select your Country name & Project name first";
        }
        else if (c_ProjName.Enabled == false)
        {
            c_ReleaseName.ToolTip = "Please select your Project name first";
        }
        else
        {
            c_ProjName.ToolTip = "Please select your Release name.";
        }
    }
}

}

このコードは正常に動作します。問題ない。今私がやりたいことは、検証という名前の別のクラスを作成し、その中でこの useridentification() メソッドを作成したことです。そして、ホームページクラスからこのメソッドを呼び出そうとしています。コードを見てください。

namespace GPTRGT
{
public partial class Homepage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
        validation val = new validation();
        val.UserIdentification();
    }

}
class validation : Homepage
{
    public void UserIdentification()
    {
        c_LOB.Items.Clear();
        c_LOB.Items.Add("RUSA");
        c_LOB.Items.Add("RETAIL");
        c_LOB.Items.Add("CARDS");
        if (c_CountryName.Enabled == false)
        {
            c_CountryName.ToolTip = "Please select your LOB first.";
        }
        else
        {
            c_CountryName.ToolTip = "Please select your Country name.";
        }

        if (c_ProjName.Enabled == false && c_CountryName.Enabled == false)
        {
            c_ProjName.ToolTip = "Please select you LOB and Country name first.";
        }
        else if (c_ProjName.Enabled == false)
        {
            c_ProjName.ToolTip = "Please select your Country name first.";
        }
        else
        {
            c_ProjName.ToolTip = "Please select your Project name.";
        }

        if (c_ProjName.Enabled == false && c_CountryName.Enabled == false && c_ProjName.Enabled == false)
        {
            c_ReleaseName.ToolTip = "Please select your LOB, Country name & Project name first";
        }
        else if (c_CountryName.Enabled == false && c_ProjName.Enabled == false)
        {
            c_ReleaseName.ToolTip = "Please select your Country name & Project name first";
        }
        else if (c_ProjName.Enabled == false)
        {
            c_ReleaseName.ToolTip = "Please select your Project name first";
        }
        else
        {
            c_ProjName.ToolTip = "Please select your Release name.";
        }
    }
}
}

これを実行すると、Internet Explorer ページに次のエラーが表示されます。

Server Error in '/' Application.
--------------------------------------------------------------------------------

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: 


Line 21:         public void UserIdentification()
Line 22:         {
Line 23:             c_LOB.Items.Clear();
Line 24:             c_LOB.Items.Add("RUSA");
Line 25:             c_LOB.Items.Add("RETAIL");


Source File: C:\Documents and Settings\rs63386\my documents\visual studio 2010\Projects\GPTRGT\GPTRGT\Homepage.aspx.cs    Line: 23 

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.]
   GPTRGT.validation.UserIdentification() in C:\Documents and Settings\rs63386\my documents\visual studio 2010\Projects\GPTRGT\GPTRGT\Homepage.aspx.cs:23
   GPTRGT.Homepage.Page_Load(Object sender, EventArgs e) in C:\Documents and Settings\rs63386\my documents\visual studio 2010\Projects\GPTRGT\GPTRGT\Homepage.aspx.cs:15
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +91
   System.Web.UI.Control.LoadRecursive() +74
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272 
4

1 に答える 1

0

次のように、防御的プログラミングを使用します。

public void UserIdentification()
{
    // Verify that c_LOB exists before we try to use it
    if(c_LOB != null)
    {
        c_LOB.Items.Clear();
        c_LOB.Items.Add("RUSA");
        c_LOB.Items.Add("RETAIL");
        c_LOB.Items.Add("CARDS");
    }
    ...
}

通常、エラーが発生したobject not set to an instance of an object場合は、エラー メッセージで報告された行にブレーク ポイントを配置し、オブジェクトにカーソルを合わせてオブジェクトを確認し、null の可能性があるオブジェクトにアクセスしないようnullに条件を設定する必要があります。ifメソッドへのすべての参照型パラメーターでもこれを行う必要があります。検証せずに何も信用しないでください。

于 2013-11-14T15:06:01.380 に答える