2011-07-08 23 views
5

私はこれが何を意味しているのかを知っており、GoogleとMSDNを検索しました。しかし、それ以外はどうすればこの問題を回避できますか?コンテキスト変数 'var'はローカル変数宣言内にのみ表示される可能性があります

(WebMatrixを使用して)App_Codeフォルダ内のカミソリコードに機能があり、データベースから情報を取得して計算を行った後、データベースを新しい合計で更新します。

しかし、私に変数を渡す方法は、App_Codeフォルダでどうすればいいですか?

ここで私が持っているものです:

EditQuantity.cshtml(ルートフォルダ):

 try 
     { 
      Base baseClass; 
      baseClass.CalculateTotalPriceInCart(Request.QueryString["PartNumber"], Request.QueryString["Description"], Session["OSFOID"], true); 

      Response.Redirect("~/Cart.cshtml"); 
     } 
     catch(Exception exmes) 
     { 
      message = exmes; 
     } 

そして、(App_Codeフォルダー内)Base.cs:

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Text; 
using WebMatrix.Data; 

/// <summary> 
/// Summary description for ClassName 
/// </summary> 
public class Base 
{ 
    public void CalculateTotalPriceInCart(var PartNumber, var Description, var OrderId, bool IsBoxed) 
    { 
     var database = Database.Open("OSF"); 
     var query = ""; 
     var result = ""; 
     decimal price = 0.00M; 

     if(IsBoxed) 
     { 
      // Select item. 
      query = "SELECT Boxes, BoxPrice FROM Cart WHERE OrderId = '" + OrderId + "' AND PartNumber = '" + PartNumber + "' AND Description = '" + Description + "' AND IsBoxed = 1"; 
      result = database.Query(query); 

      // Recalculate Price. 
      foreach(var item in result) 
      { 
       price = result.Boxes * result.BoxPrice; 
      } 

      // Update item. 
      query = "UPDATE Cart SET BoxPrice = '" + price + "' WHERE OrderId = '" + OrderId + "' AND PartNumber = '" + PartNumber + "' AND Description = '" + Description + "' AND IsBoxed = 1"; 
      database.Execute(query); 
     } 
    } 
} 

を私は」それがうまくいくかどうかを調べるためにいくつかのことを試しましたが、そうではありません。私は明らかにそれを間違っているが、これは私がデスクトップアプリケーションでそれをやっているところなのだが、なぜWebページでこれが違うのだろうと思っているのだろう。

ありがとうございました!

+2

備考として:Prepared/Parameterizedステートメントはあなたの友人です。本当に良い理由がない限り、文字列連結によるクエリを作成しないでください。 – CodesInChaos

答えて

5

メソッドパラメータはvarキーワードで定義できません。コンパイラはコンパイル時にメソッドのシグネチャを判別できないためです。あなたはそれがstringIEnumerable<dynamic>をキャストすることはできませんと述べた別のコメントで

public void CalculateTotalPriceInCart(
     string Description, 
     string PartNumber, 
     string OrderId, 
     bool IsBoxed) 

。したがって、パラメータを正しく宣言してください!私はそれがどれか分かりません。

public void CalculateTotalPriceInCart(
     IEnumerable<dynamic> Description, // for example 
     string PartNumber, 
     string OrderId, 
     bool IsBoxed) 
+0

私はすでにそれを試みましたが、このエラーが出ました: '暗黙のうちに、 'System.Collections.Generic.IEnumerable 'を 'string''に暗黙的に変換できません。 – bendr

+3

私の更新を見てください、Jase。あなたの議論のタイプが何であるかを私が知る方法はありません。あなたはあなたが渡そうとしているものを見る必要があります。 – Amy

2

パラメータリストの変数を具体的な型に置き換えるだけです。

ですから、これを持っているだろう、彼らは文字列だと仮定すると:

public void CalculateTotalPriceInCart(string PartNumber, string Description, string OrderId, bool IsBoxed)

+0

ええ、ええ!私は思う.. – bendr

+0

Nooope!申し訳ありませんが動作しません。既にそれを試して、これを取得: '暗黙のうちに 'System.Collections.Generic.IEnumerable 'を 'string''に変換することはできません – bendr

+2

どの変数がIEnumerableとして通っていますか?コードでは単一の値を期待しているように見えますが、コレクションに入ってくるように見えるため、これらの変数に値を設定しているコードに問題があるようです。いずれにせよ、解決策は、来るものと一致する実際の型をパラメータに与えることですが、その前に、それらの変数が自分が思う型を保持していることを確認する必要があります。 – heisenberg

2

あなたがメソッドのパラメータの型としてvar使用することはできません。それは実際の型(文字列、int、オブジェクトなど)でなければなりません。 varはメソッド内でのみ使用できます(foreachのように)

+0

私は、文字列を使用してみましたが、それはおそらく私が試しただけでIEnumerableを – bendr

+0

」と '暗黙的に変換できません型「System.Collections.Generic.IEnumerable 」をスローし、または型として動的を使用して、私の質問で正確に同じエラーを与えた –

+0

次にあなたがタイプとしてIEnumerableをを使用する必要がありますstring''例外 – bendr

1

これは実際のコードですか?

Base baseClass; 
baseClass.CalculateTotalPriceInCart(Request.QueryString["PartNumber"], Request.QueryString["Description"], Session["OSFOID"], true); 

この行はコンパイルしないでください。エラー鋳造について

は、試してみてください。

public void CalculateTotalPriceInCart(string PartNumber, string Description, IEnumerable<dynamic> OrderId, bool IsBoxed) 

を製品型番と説明がクエリ文字列から来ているので、それらは間違いなく、文字列であり、trueIEnumerable<dynamic>だろう事が受注しなければならないので、間違いなくboolです。

Session["OSFOID"]はいくつかの値の集合であり、単一の値ではないため、これは完全に問題を解決するわけではありません。あなたはそれが単一の値だと確信している場合は、それが動作しない場合は、次に何をセッションに入れていることは、あなたがそれだと思うものではありません

CalculateTotalPriceInCart(Request.QueryString["PartNumber"], Request.QueryString["Description"], ((IEnumerable<string>)Session["OSFOID"]).FirstOrDefault(), true); 

を試してみてください。

これは、どちらかのデスクトップアプリケーションでは動作しません

I've tried a few things to see if it'd work, but nope. I'm obviously doing it wrong, but this is how I do it in Desktop apps, I don't get why it'd be different here for WebPages, and how shold I go about doing this?

、あなたは、単にパラメータの型としてvar定義することはできませんについて。あなたが得ることができる最も近いのはdynamicです(コンパイラはその型が分からないので)Intellisenseを渡すことはありませんが、コンパイラには知られていない型を渡して使用することになります(実際のタイプが何であるかを知っておいてください)

関連する問題