2009-05-13 14 views
11

Quiero acceder a un valor de sesión en el método jquery en la página de vista ASP.NET MVC. Consulte el código siguiente,Cómo obtener asp.net Valor de sesión en el método jquery?

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

¿Cómo puedo obtener el valor de la sesión en jquery.

+0

que parece que se debe trabajar lo que sucede cuando se utiliza el código anterior – ichiban

Respuesta

17
$('input,select').attr('disabled','<%=Session["CoBrowse"].ToString() %>'); 
8

No estoy seguro si esta es la mejor ruta, pero dentro de su página aspx que podría crear un método que devuelve el valor de la variable de sesión, por ejemplo,

lado del servidor:

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

entonces llaman a este lado del cliente usando el método 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); 
    } 
}); 
+3

puede.? accedes a la Sesión desde un método estático? No pensé que pudieras. – rball

+0

Esta es la ruta que he bajado también. Tengo un servicio web que me devuelve la identificación de la sesión como tal ... Guid a = Guid.Parse (HttpContext.Current.Session ["Session_Id"]. ToString()), y luego lo leí en el lado del cliente a través de la función jquery ajax. Ten en cuenta que tendrá que ser un GET ya que solo estás devolviendo un valor – tmutton

+0

No sé por qué alguien votó por esta respuesta no podemos obtener la Sesión en el método estático –

8

Muchos comentarios:

  1. No se puede "sesión de acceso de jQuery". Utiliza MVC y asp.net para crear una página HTML (con JavaScript). Session es un objeto del lado del servidor y JavaScript se ejecuta en el lado del cliente.
  2. Eche un vistazo a jQuery's selectors. Tienen selectores útiles como :checkbox, :text, etc.
  3. Su código produce el JavaScript que espera: compila, ejecuta y produce JavaScript con true o false en el lugar correcto.
  4. Esta no es la forma de deshabilitar un elemento. Si un elemento tiene el atributo 'deshabilitado', se desactivará, sin importar el valor. <input type="checkbox" disabled="false" /> también es una casilla de verificación deshabilitada, por lo que sus controles siempre están deshabilitados.
  5. Si ese es el camino que elija todos modos, tenga en cuenta:

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

    Esto producirá el lado del cliente JavaScript código:

    var isCoBrowse = true; 
    

    Y, para permitir que un elemento:

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

Además, hay formas mucho mejores de cumpla esto. ¿Ha considerado desactivar los controles del servidor, si es posible?

+1

var isCoBrowse = <% = Session ["Name"]. ToString(). ToLower()%>; sintaxis incorrecta – sarsnake

+0

# 1 - Respuesta incorrecta (por ejemplo, var search = @Session ("MyValue") funciona) –

+1

@EdDeGagne - ¿No escribí eso en el punto 5? JavaScript no puede acceder a la sesión directamente, y ni siquiera sabe que hay una sesión. Usar la sesión, como servidor, para crear JavaScript, es algo completamente diferente. – Kobi

1

Si esa variable de sesión es información confidencial (que en este caso probablemente no lo es), no utilizaría esta solución, ya que mostraría los datos de sesión cuando mirase la fuente de JavaScript. Si se trata de datos de sesión confidenciales, es probable que acceda a él a través de un método web (consulte la respuesta anterior).

5
<input id="sessionInput" type="hidden" value='<%= Session["name"] %>' /> 

var getSessionValue = $('#sessionInput').val(); 
-1

Fácil! cuando sepa cómo:

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

... y en.js:

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

lo siento - no puede publicar el código HTML completo como este sitio excluye los paréntesis angulares :(

Cuestiones relacionadas