2011-01-21 31 views
70

WebMethodの内部でセッション値を使用できますか?webmethodでセッションにアクセスするにはどうしたらいいですか?

私は System.Web.Services.WebMethod(EnableSession = true)を使用してみましたが、私は in this exampleのようなセッションパラメータにアクセスすることはできません

[System.Web.Services.WebMethod(EnableSession = true)] 
    [System.Web.Script.Services.ScriptMethod()] 
    public static String checaItem(String id) 
    { 
     return "zeta"; 
    } 

ここWebMethodの呼び出し、JSです:あなたが使用することができます

$.ajax({ 
     type: "POST", 
     url: 'Catalogo.aspx/checaItem', 
     data: "{ id : 'teste' }", 
     contentType: 'application/json; charset=utf-8', 
     success: function (data) { 
      alert(data); 
     } 
    }); 
+4

コード例を掲載すると、回答を得るのに役立ちます。 – volpav

+0

例外が発生していますか? –

+1

上記の例では、セッション値にアクセスしようとしていません。最初にセッション変数を設定し、投稿したリンクのようにアクセスする必要があります。 return(int)セッション["Conversions"]; – capdragon

答えて

94

を:

HttpContext.Current.Session 

ただし、あなたもそうでない限りnullになりますpecify EnableSession=true

[System.Web.Services.WebMethod(EnableSession = true)] 
public static String checaItem(String id) 
{ 
    return "zeta"; 
} 
+17

皮肉なことに、これは私がすでにやっていたことです - 私にとってはうまくいきませんでした。 HttpContext.Current.Session.Countが0を返しています(つまり、セッション内の項目がありません)。私の場合、答えは[WebMethod]を[WebMethod(EnableSession = true)]に変更して問題になりました。 Woot! – BrainSlugs83

+3

ウェブを設定することを忘れないでください。config Moesio

10

Webメソッドのためのセッションを有効にするには2つの方法があります。

1. [WebMethod(enableSession:true)] 

2. [WebMethod(EnableSession = true)] 

enableSession:trueが私のために動作しませんコンストラクタの引数で最初のもの。 2番目はEnableSessionのプロパティが動作します。

+0

[解決方法](https://msdn.microsoft.com/en-us/library/system.web.services.webmethodattribute%28v=vs.110%29)できません。 aspx)もし最初のものがコンパイルされていても - 私は信じていません。 2番目は、プロパティを設定しているので機能します(ここでは明らかにXDです)。 – MVCDS

+0

@MVCDSなぜそれはコンパイルされるべきではないと思いますか?ドキュメントには、publicコンストラクタ 'WebMethodAttribute(Boolean)'があります。 – Warlock

+0

あなたは絶対に正しいです。パラメータ名を設定しないと、動作が異なりますか?なぜなら、コンストラクタ(属性用)をコーディングしていたときに、非常に奇妙なことが起きたからです。 – MVCDS

0

あなたはこの [WebMethod属性] 公共の静的な無効MyMethodはのように試すことができます(文字列のProductID、文字列の価格、ストリング量、文字列の合計は)//ここで新しいパラメータを追加します {CONNSTRING =新しいdb_class db_class ();

  DataTable dt = (DataTable)HttpContext.Current.Session["aaa"]; 

      if (dt == null) 
      { 
       DataTable dtable = new DataTable(); 

       dtable.Clear(); 
       dtable.Columns.Add("ProductID");// Add new parameter Here 
       dtable.Columns.Add("Price"); 
       dtable.Columns.Add("Quantity"); 
       dtable.Columns.Add("Total"); 
       object[] trow = { ProductID, Price, Quantity, Total };// Add new parameter Here 
       dtable.Rows.Add(trow); 
       HttpContext.Current.Session["aaa"] = dtable;     
      } 
      else 
      { 
       object[] trow = { ProductID, Price, Quantity, Total };// Add new parameter Here 
       dt.Rows.Add(trow); 
       HttpContext.Current.Session["aaa"] = dt; 
      } 


     } 
     catch (Exception) 
     { 
      throw; 
     } 
    } 
0

は、セッションが有効になっている場合は、web.configファイルを見てみましょう{ を試してみてください。このポストは、より多くのアイデアを提供するかもしれない。 https://stackoverflow.com/a/15711748/314373

0

のために我々が使用する必要がセッションを有効 [WebMethod属性(enableSession:真)]今

[WebMethod(EnableSession=true)] 
public string saveName(string name) 
{ 
    List<string> li; 
    if (Session["Name"] == null) 
    { 
     Session["Name"] = name; 
     return "Data saved successfully."; 

    } 

    else 
    { 
     Session["Name"] = Session["Name"] + "," + name; 
     return "Data saved successfully."; 
    } 


} 

セッションを使用してこれらの名前をretriveするには、我々は、この

[WebMethod(EnableSession = true)] 
    public List<string> Display() 
    { 
     List<string> li1 = new List<string>(); 
     if (Session["Name"] == null) 
     { 

      li1.Add("No record to display"); 
      return li1; 
     } 

     else 
     { 
      string[] names = Session["Name"].ToString().Split(','); 
      foreach(string s in names) 
      { 
       li1.Add(s); 
      } 

      return li1; 
     } 

    } 

ので、それは意志のように行くことができますすべての名前をセッションから検索して表示します。

関連する問題