2009-05-13 13 views
11

Desidero accedere a un valore di sessione nel metodo jquery nella pagina di visualizzazione MVC ASP.NET. Vedere il codice seguente,Come ottenere il valore di asp.net nel metodo jquery?

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

Come posso ottenere il valore di sessione in jQuery.

+0

che sembra che dovrebbe funzionare ciò che accade quando si utilizza il codice di cui sopra – ichiban

risposta

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

Non sono sicuro se questo è il percorso migliore ma all'interno della pagina di aspx è possibile creare un metodo che restituisce il valore della variabile di sessione, ad es.

lato server:

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

quindi chiamare questa parte metodo di client utilizzando 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

Can.? accedi a Session da un metodo statico? Non pensavo che potessi. – rball

+0

Questa è la strada che ho percorso anch'io. Ho un servizio web che mi restituisce l'id di sessione in questo modo .. Guid a = Guid.Parse (HttpContext.Current.Session ["Session_Id"]. ToString()), e poi l'ho letto dal lato client tramite la funzione jquery ajax. Ricorda che sarà necessario ottenere un GET poiché stai solo restituendo un valore – tmutton

+0

Non so perché nessuno vota questa risposta non possiamo ottenere Session nel metodo statico –

8

Molti commenti:

  1. Non è possibile "Accesso Session da jQuery". Usa MVC e asp.net per creare una pagina HTML (con JavaScript). Session è un oggetto lato server e JavaScript viene eseguito sul lato client.
  2. Dai uno sguardo allo jQuery's selectors. Hanno selettori utili come :checkbox, :text, ecc.
  3. Il tuo codice produce il codice JavaScript che ti aspetti: compila, esegue e genera JavaScript con true o false nel posto giusto.
  4. Questo non è il modo per disabilitare un elemento. Se un elemento ha l'attributo 'disabled' sarà disabilitato, indipendentemente dal valore. <input type="checkbox" disabled="false" /> è anche una casella di controllo disabilitata, quindi i controlli sono sempre disabilitati.
  5. Se questo è il modo in cui si sceglie in ogni caso, prendere in considerazione:

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

    Questo produrrà il JavaScript lato client codice:

    var isCoBrowse = true; 
    

    E, per abilitare un elemento:

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

Inoltre, ci sono modi molto migliori per un tutto questo Hai considerato di disabilitare i controlli sul lato server, se possibile?

+1

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

+0

# 1 - Risposta errata (ad es. var search = @Session ("MyValue") funziona) –

+1

@EdDeGagne - Non l'ho scritto al punto 5? JavaScript non può accedere direttamente alla sessione e non sa nemmeno che esiste una sessione. Usando la sessione, come lato server, per creare JavaScript, c'è qualcos'altro. – Kobi

1

Se la variabile Sessione è dati sensibili (che in questo caso probabilmente non lo è), non utilizzerei questa soluzione poiché mostrerebbe i dati della sessione quando si guardava la sorgente javascript. Se si tratta di dati di sessione sensibili, è probabilmente meglio accedervi tramite un metodo web (vedere la risposta sopra).

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

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

Facile! quando sai come:

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

... e nel.il file js:

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

dispiace - io non possono inserire il codice HTML completo come questo sito strisce fuori parentesi angolari :(

Problemi correlati