Как получить значение сеанса asp.net в методе jquery? - PullRequest
12 голосов
/ 13 мая 2009

Я хочу получить доступ к значению Session в методе jquery на странице просмотра ASP.NET MVC. Смотрите ниже код,

$('input[type=text],select,input[type=checkbox],input[type=radio]').attr('disabled', '<%= Session["CoBrowse"].ToString() %>');

Как мне получить значение Session в jquery.

Ответы [ 6 ]

18 голосов
/ 13 мая 2009
$('input,select').attr('disabled','<%=Session["CoBrowse"].ToString() %>');
8 голосов
/ 13 мая 2009

Много комментариев:

  1. Вы не можете "получить доступ к сеансу из jQuery". Вы используете MVC и asp.net для создания HTML-страницы (с JavaScript). Сеанс является объектом на стороне сервера, а JavaScript выполняется на стороне клиента.
  2. Взгляните на селекторы jQuery . У них есть полезные селекторы, такие как :checkbox, :text и т. Д.
  3. Ваш код генерирует ожидаемый вами JavaScript: он компилируется, запускается и генерирует JavaScript с true или false в нужном месте.
  4. Это не способ отключить элемент. Если элемент имеет атрибут «disabled», он будет отключен независимо от значения. <input type="checkbox" disabled="false" /> также является отключенным флажком, поэтому ваши элементы управления всегда отключены .
  5. Если вы так или иначе выбираете этот способ, подумайте:

    var isCoBrowse = <%= Session["Name"].ToString().ToLower() %>;
    if(!isCoBrowse) //disable controls
      $(":text,:checkbox,:radio").attr("disabled","disabled"); //standard.
    

    Это даст код JavaScript на стороне клиента:

    var isCoBrowse = true;
    

    И, чтобы включить элемент:

    $("input").removeAttr("disabled");
    

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

8 голосов
/ 13 мая 2009

Не уверен, что это лучший маршрут, но на вашей странице aspx вы можете создать метод, который возвращает значение переменной сеанса, например,

Серверная сторона:

using System.Web.Services;
 [WebMethod(EnableSession = true)]
public static string GetSession()
{
   return Session["CoBrowse"].ToString();
}

, затем вызовите этот метод на стороне клиента, используя jQuery:

$.ajax({
    type: "POST",
    url: "./Default.aspx/GetSession",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(result){
        ('input[type=text],select,input[type=checkbox],input[type=radio]').attr('disabled', result.d);
    }
});
6 голосов
/ 13 июня 2011
<input id="sessionInput" type="hidden" value='<%= Session["name"] %>' />

var getSessionValue = $('#sessionInput').val();
1 голос
/ 28 июля 2009

Если эта переменная Session является конфиденциальными данными (которые в данном случае, вероятно, не являются), я бы не использовал это решение, поскольку оно показывало бы данные Session, когда вы просматривали источник javascript. Если это конфиденциальные данные сеанса, лучше всего получить к ним доступ через веб-метод (см. Ответ выше).

0 голосов
/ 05 июля 2013

Легко! когда знаешь как:

@ Html.Encode (Session ( "classificationTitle"))

... и в файле .js:

var classificationTitle = document.getElementById('classificationTitle').innerHTML;

извините - я не могу опубликовать полный HTML, так как этот сайт убирает угловые скобки: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...