2

我想从 if 语句中的数据库调用中获取数据,然后我希望能够在页面稍后的 if 语句之外使用该数据。

那么,为什么这不起作用?我能做些什么来完成这项工作?我只是收到错误消息“编译器错误消息:CS0103:名称'selectedData'在当前上下文中不存在”。我试图在 if 语句之外声明一个“selectedData”变量,以便它可用,但我似乎无法弄清楚如何正确地做到这一点。

@{

    var testVariable = "blah";

    //set cache key and query based their being a craft name
    if(testVariable.Length > 0){

        var db = Database.Open("Connection"); 
        var selectedData = db.Query("SELECT * FROM Products");             
    } 

}


<div>
    @foreach (var row in selectedData){
        @row.ContentTitle <br />
        @row.ContentShortDescription <br />
    } 
</div>
4

2 回答 2

2

这是一个范围问题。您需要在 if 范围之外声明变量。

@{

    var testVariable = "blah";
    Type selectedData;

    //set cache key and query based their being a craft name
    if(testVariable.Length > 0){

        var db = Database.Open("Connection"); 
        selectedData = db.Query("SELECT * FROM Products");             
    } 

}


<div>
    @foreach (var row in selectedData){
        @row.ContentTitle <br />
        @row.ContentShortDescription <br />
    } 
</div>

我对这里的类型不熟悉,所以我使用了Type. 在那里替换适当的类型。请注意,此代码段也不能确保在进入循环之前已正确设置 selectedData。你也应该处理它。

于 2012-11-05T20:29:52.390 回答
0

这是一个关于范围的问题。

基本上,在 C# 中,当您打开一组新的 . 时{},您声明了一个新的范围。在该范围内创建的变量,在退出时被销毁。这是一个相当简单的解释,并不完全准确,但它很容易理解。

{
    var testVariable = "blah";

    //set cache key and query based their being a craft name
    if(testVariable.Length > 0)
    {

        var db = Database.Open("Connection"); 
        // Create a new variable.
        var selectedData = db.Query("SELECT * FROM Products");          
    } 
    // Variable doesn't exist anymore.
}

要解决这个问题:

{
    var testVariable = "blah";
    // Create variable outside the if scope
    var selectedData = null; // Won't compile, compiler cannot find valid variable type.

    //set cache key and query based their being a craft name
    if(testVariable.Length > 0)
    {

        var db = Database.Open("Connection"); 
        // Assign a value to a variable
        selectedData = db.Query("SELECT * FROM Products");          
    } 
    // Variable still exist!
}
// Here, variable would cease to exist. :(

但是在这里,代码不会编译,因为编译器不知道类型selectedData是什么,因为我null  在创建时分配了它。所以,假设selectedData是类型Data

{
    var testVariable = "blah";
    // Create variable outside the if scope
    Data selectedData = null; // Now it compiles. :)

    //set cache key and query based their being a craft name
    if(testVariable.Length > 0)
    {

        var db = Database.Open("Connection"); 
        // Assign a value to a variable
        selectedData = db.Query("SELECT * FROM Products");          
    } 
    // Variable still exist!
}
// Here, variable would cease to exist. :(

之后,您可以if (selectedData != null) 知道数据是否被正确查询。

于 2012-11-05T20:32:11.317 回答