2011-01-21 45 views
70

Tôi có thể sử dụng các giá trị phiên trong một số WebMethod không?Tôi làm cách nào để truy cập phiên trong webmethod?

Tôi đã cố gắng sử dụng System.Web.Services.WebMethod(EnableSession = true) nhưng tôi không thể truy cập vào thông số phiên như in this example:

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

đây là JS người gọi WebMethod:

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

Đăng một ví dụ về mã sẽ giúp chúng tôi cung cấp cho bạn câu trả lời. – volpav

+0

Bạn có bị ngoại lệ không? –

+1

Trong ví dụ trên tôi không thấy bạn đang cố truy cập vào bất kỳ giá trị phiên nào. Bạn cần phải thiết lập phiên var đầu tiên sau đó truy cập nó như liên kết bạn đăng. return (int) Phiên ["Chuyển đổi"]; – capdragon

Trả lời

94

Bạn có thể sử dụng:

HttpContext.Current.Session 

Nhưng nó sẽ là null trừ khi bạn cũng s pecify EnableSession=true:

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

Trớ trêu thay, đây là những gì tôi đã làm - chỉ có nó không làm việc cho tôi. HttpContext.Current.Session.Count đã trở về 0 (tức là không có mục nào trong Phiên). Đối với tôi, câu trả lời là trong câu hỏi, thay đổi [WebMethod] thành [WebMethod (EnableSession = true)] đã hoạt động. Woot! – BrainSlugs83

+3

Hãy nhớ định cấu hình web.config Moesio

10

Có hai cách để cho phép phiên làm việc cho một phương thức web:

1. [WebMethod(enableSession:true)] 

2. [WebMethod(EnableSession = true)] 

Người đầu tiên với lập luận constructor enableSession:true không làm việc cho tôi. Phần thứ hai có thuộc tính EnableSession.

+0

Tôi không thể [tìm ra] (https://msdn.microsoft.com/en-us/library/system.web.services.webmethodattribute%28v=vs.110%29. aspx) nếu người đầu tiên thậm chí biên dịch - tôi sẽ tin nó không. Thứ hai không làm việc bởi vì bạn đang thiết lập các tài sản (chỉ được rõ ràng ở đây XD). – MVCDS

+0

@MVCDS Tại sao bạn nghĩ rằng nó không nên được biên soạn? Bạn có thể tìm thấy một hàm tạo công khai 'WebMethodAttribute (Boolean)' trong tài liệu. – Warlock

+0

Bạn hoàn toàn đúng. Liệu nó có hoạt động khác nếu bạn không đặt tên tham số? Bởi vì nếu nó xảy ra, một cái gì đó rất kỳ lạ xảy ra khi họ đang mã hóa các nhà xây dựng (cho các thuộc tính). – MVCDS

0

Bạn có thể thử như thế này [WebMethod] public static void MyMethod (string ProductID, chuỗi Giá, chuỗi Số lượng, chuỗi Tổng số) // Thêm tham số mới đây { db_class Connstring = new db_class(); thử {

  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

Đối với phép phiên chúng ta phải sử dụng [WebMethod (enableSession: true)]

[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."; 
    } 


} 

Bây giờ để truy xuất các tên này sử dụng phiên chúng ta có thể đi như thế này

[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; 
     } 

    } 

nên nó sẽ truy xuất tất cả các tên từ phiên và hiển thị.

Các vấn đề liên quan