Установить сессию в PageMethod (asp.net) - PullRequest
2 голосов
/ 05 апреля 2011

Мне нужно установить пару сессионных переменных, вызывая PageMethod с помощью jQuery.

Клиентская сторона js выглядит так:

function setSession(Amount, Item_nr) {
        //alert(Amount + " " + Item_nr);
        var args = {
            amount: Amount, item_nr: Item_nr
        }
        //alert(JSON.stringify(passingArguments));
       $.ajax({
           type: "POST",
           url: "buycredit.aspx/SetSession",
           data: JSON.stringify(args),
           contentType: "application/json; charset=utf-8",
           dataType: "json",
           success: function () {
               alert('Success.');
           },
           error: function () {
               alert("Fail");
           }
       });

     }

и на стороне сервера вот так:

[System.Web.Services.WebMethod(EnableSession = true)]
public static void SetSession(int amount, int item_nr)
{
    HttpContext.Current.Session["amount"] = amount;
    HttpContext.Current.Session["item_nr"] = item_nr;
}

только кажется, что сессионные переменные не установлены. Когда я пытаюсь ответить. Записываю переменные сессии, я ничего не получаю. Я не получаю ошибок, и могу предупредить значения, переданные из события onclick, в функцию js, чтобы они были там.

Кто-нибудь может увидеть, пропустил ли я что-то?

Thnx

Ответы [ 2 ]

4 голосов
/ 05 апреля 2011

Если вы ничего не получите в сеансе, потому что ноль передается в веб-метод, используйте отладчик, чтобы просмотреть ваш javascript и c #, чтобы увидеть, откуда он берется.

Код, который вы разместили, кажется нормальным, так как мне удалось заставить его работать на быстрой тестовой странице, поэтому проблема в другом месте вашего кода. Вот мой тестовый код, надеюсь, он поможет.

JQuery:

$(document).ready(function () {
        $('#lnkCall').click(function () {
            setSession($('#input1').val(), $('#input2').val());
            return false;
        });
    });

    function setSession(Amount, Item_nr) {
        var args = {
            amount: Amount, item_nr: Item_nr
        }

        $.ajax({
            type: "POST",
            url: "buycredit.aspx/SetSession",
            data: JSON.stringify(args),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function () {
                alert('Success.');
            },
            error: function () {
                alert("Fail");
            }
        });

    }

HTML:

<div>
    Input1: <input id="input1" type="text" />
    <br />
    Input2 <input id="input2" type="text" />  
    <br />
    <a id="lnkCall" href="#">make call</a>


    <br />
    <asp:Button ID="myButton" runat="server" Text="check session contents" onclick="myButton_Click" />
    <br />
    <asp:Literal ID="litMessage" runat="server" />

</div>

с #

[System.Web.Services.WebMethod(EnableSession = true)]
public static void SetSession(int amount, int item_nr)
{
    HttpContext.Current.Session["amount"] = amount;
    HttpContext.Current.Session["item_nr"] = item_nr;
}


protected void myButton_Click(object sender, EventArgs e)
{
    litMessage.Text = "ammount = " + HttpContext.Current.Session["amount"] + "<br/>item_nr = " + HttpContext.Current.Session["item_nr"];
}
0 голосов
/ 05 апреля 2011

Правильно ли переданы переменные в ваш метод? Я бы отладил и пошагово прошел, чтобы убедиться, что amount и item_nr делают это для вашего серверного метода. Если это проблема, вы можете рассмотреть возможность передачи своих аргументов индивидуально (или, возможно, установить тип сообщения ajax на traditional:

Примеры:

$.ajax({
       type: "POST",
       url: "buycredit.aspx/SetSession",

       //Option 1:
       traditional : true, 

       //Option 2:
       data: 
       {
              'amount' : Amount,
              'item_nr': Item_nr
       },

       contentType: "application/json; charset=utf-8",
       dataType: "json",
       success: function () {
           alert('Success.');
       },
       error: function () {
           alert("Fail");
       }
   });

Не уверен, что они помогут, но, возможно, стоит попробовать.

...