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 に答える