C# Blazor:当前上下文中不存在名称

C# Blazor:当前上下文中不存在名称,c#,blazor,blazor-server-side,C#,Blazor,Blazor Server Side,我收到错误CS0103-“当前上下文中不存在名称“newHotel”: 我创建了一个名为“Hotel”的类和一个名为“HotelName”的属性 我创建了一个名为“newHotel”的变量,它属于Hotel类型。 我已经用“Paradise Beach”的值初始化了变量。 我不知道我哪里出错了 非常感谢,这是因为newHotel是在OnInit方法中声明的局部变量,因此它超出了范围。在newHotel的OnInitialized方法上方添加属性 @代码{ ///附加属性 hotelnewhot

我收到错误CS0103-“当前上下文中不存在名称“newHotel”:

我创建了一个名为“Hotel”的类和一个名为“HotelName”的属性
我创建了一个名为“newHotel”的变量,它属于Hotel类型。
我已经用“Paradise Beach”的值初始化了变量。

我不知道我哪里出错了


非常感谢,

这是因为newHotel是在OnInit方法中声明的局部变量,因此它超出了范围。在newHotel的OnInitialized方法上方添加属性


@代码{
///附加属性
hotelnewhotel{get;set;}=newHotel();
受保护的覆盖无效OnInitialized()
{
base.OnInitialized();
新酒店
{
HotelName=“天堂海滩酒店”
};
}
一流酒店
{
公共字符串HotelName{get;set;}
}
}
编辑: 您将遇到的下一个问题是newHotel的NullReference错误,因为在OnInit方法运行和newHotel初始化之前,页面试图呈现。一个选项是为newHotel添加空检查,另一个选项是在声明时初始化它


@第页“/酒店”
旅馆
@if(newHotel!=null)
{

酒店名称:@newHotel.HotelName

}
这是因为newHotel是在OnInit方法中声明的局部变量,因此它超出了范围。在newHotel的OnInitialized方法上方添加属性


@代码{
///附加属性
hotelnewhotel{get;set;}=newHotel();
受保护的覆盖无效OnInitialized()
{
base.OnInitialized();
新酒店
{
HotelName=“天堂海滩酒店”
};
}
一流酒店
{
公共字符串HotelName{get;set;}
}
}
编辑: 您将遇到的下一个问题是newHotel的NullReference错误,因为在OnInit方法运行和newHotel初始化之前,页面试图呈现。一个选项是为newHotel添加空检查,另一个选项是在声明时初始化它


@第页“/酒店”
旅馆
@if(newHotel!=null)
{

酒店名称:@newHotel.HotelName

}
哦,我明白了!!所以基本上我有它,当初始化组件时,它会创建变量“newHotel”,但是因为组件当时没有被呈现,所以局部变量没有被声明。非常感谢您的评论。我真的很难理解为什么我要两次实例化newHotel,为什么我需要在新的obj上设置get/set,所以我删除了{get;set;},只需要
Hotel newHotel=newHotel()
,然后还删除了
newHotel=newHotel
,只需设置酒店名称,因此
newHotel.HotelName=“Paradise Beach”
…。它是有效的。我应该在newHotel上使用get/set,或者为什么我应该实例化它两次?在声明newHotel时实例化它将防止加载此页面时出现NullRef异常。如果您不这样做,那么您必须确保在将newHotel与html一起使用时检查newHotel是否为null,然后在实例化newHotel时,它将呈现。这一切都归结为这样一个事实:页面将在不等待生命周期事件发生的情况下呈现。这篇文章讨论了blazor组件渲染两次,您可能会注意到,也可能没有注意到;在OnInitialized()方法中。下面是另一个链接,它将详细介绍生命周期事件,以及您在声明
Hotel newHotel=new Hotel()
时的第一个注释,您正在创建一个仅在OnInit方法范围内可用的局部变量。在您将newHotel声明为此组件的财产之前,此组件中的任何其他位置都无法访问newHotel哦,我明白了!!所以基本上我有它,当初始化组件时,它会创建变量“newHotel”,但是因为组件当时没有被呈现,所以局部变量没有被声明。非常感谢您的评论。我真的很难理解为什么我要两次实例化newHotel,为什么我需要在新的obj上设置get/set,所以我删除了{get;set;},只需要
Hotel newHotel=newHotel()
,然后还删除了
newHotel=newHotel
,只需设置酒店名称,因此
newHotel.HotelName=“Paradise Beach”
…。它是有效的。我应该在newHotel上使用get/set,或者为什么我应该实例化它两次?在声明newHotel时实例化它将防止加载此页面时出现NullRef异常。如果您不这样做,那么您必须确保在将newHotel与html一起使用时检查newHotel是否为null,然后在实例化newHotel时,它将呈现。这一切都归结为这样一个事实:页面将在不等待生命周期事件发生的情况下呈现。这篇文章讨论了blazor组件渲染两次,您可能会注意到,也可能没有注意到;在OnInitialized()方法中。下面是另一个链接,它将详细介绍生命周期事件,以及您在声明
Hotel newHotel=new Hotel()
时的第一个注释,您正在创建一个仅在OnInit方法范围内可用的局部变量。在您将newHotel声明为此组件的属性之前,此组件中的任何其他位置都无法访问newHotel
@page "/hotels"


<h3>Hotels</h3>
<p>
    Hotel Name: @newHotel.HotelName // **THIS IS WHERE THE ERROR IS SHOWN IN VS2019**
</p>
@code {

    protected override void OnInitialized()
    {
        base.OnInitialized();

        Hotel newHotel = new Hotel 
        {
            HotelName = "Paradise Beach"
        };
    }

    class Hotel
    {
        public string HotelName { get; set; }
    }
}