0

我尝试在 ASP.net C# 中使用以下代码:

@{
    var Host = Request.ServerVariables["HTTP_HOST"];
    if (Host.Contains("example.com")) {
        var Online = true;        
    }
    if (Online == true) {
        // Analytics Code
    }
}

但它返回错误。

我发现该变量Online不能在外部使用,因为它的范围仅限于声明它的 IF 语句。

通过反复试验,我发现以下代码有效:

@{
    var Host = Request.ServerVariables["HTTP_HOST"];
    if (Host.Contains("example.com")) {
        Page.Online = true;        
    }
    if (Page.Online == true) {
        // Analytics Code
    }
}

}为什么第二个片段可以工作,尽管它不应该因为变量范围预计将在IF 语句关闭时结束?

谢谢

4

2 回答 2

3

在线是一个变量

var Online = true;

页面是一个对象。它实际上是一个内置对象,属于您正在操作的 Web 请求上下文。它也是一个动态对象,这意味着它没有固定的类型。它的类型是在运行时推断的。

Page.Online

Page.Online本身并不是一个变量。它是属于 Page 的动态属性。动态对象的一个​​特点是您可以为它们分配任何东西,以及所有任何方法,编译器不会抱怨。它将解析延迟到运行时,从上下文中推断出它的值。

于 2012-04-22T10:39:03.743 回答
3

因为在第二条语句中,它没有声明一个变量,而只是设置它的值。Page.Online可能是在自身的基类中声明和初始化的Page

于 2012-04-22T10:26:55.190 回答