Puis-je utiliser les valeurs de session dans WebMethod
?
J'ai essayé d'utiliser System.Web.Services.WebMethod(EnableSession = true)
mais je ne peux pas accéder au paramètre de session comme dans cet exemple :
[System.Web.Services.WebMethod(EnableSession = true)]
[System.Web.Script.Services.ScriptMethod()]
public static String checaItem(String id)
{
return "zeta";
}
voici le JS qui appelle le webmethod:
$.ajax({
type: "POST",
url: 'Catalogo.aspx/checaItem',
data: "{ id : 'teste' }",
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert(data);
}
});
Vous pouvez utiliser:
HttpContext.Current.Session
Mais ce sera null
sauf si vous spécifiez également EnableSession=true
:
[System.Web.Services.WebMethod(EnableSession = true)]
public static String checaItem(String id)
{
return "zeta";
}
Il existe deux façons d'activer la session pour une méthode Web:
1. [WebMethod(enableSession:true)]
2. [WebMethod(EnableSession = true)]
Le premier avec l'argument constructeur enableSession:true
ne fonctionne pas pour moi. Le second avec la propriété EnableSession
fonctionne.
Pour activer la session, nous devons utiliser [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.";
}
}
Maintenant, pour récupérer ces noms en utilisant session, nous pouvons aller comme ceci
[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;
}
}
donc il va retriver tous les noms de la session et montrer.
Jetez un coup d'oeil à votre web.config si la session est activée. Ce post ici pourrait donner plus d'idées . https://stackoverflow.com/a/15711748/314373
Vous pouvez essayer comme ceci [WebMethod] public static void MyMethod (chaîne ProductID, chaîne Price, chaîne Quantité, chaîne Total) // Ajouter un nouveau paramètre Ici. { db_class Connstring = new db_class (); essayer {
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;
}
}