2009-08-19 2 views
6

Sto provando a leggere il valore di una proprietà C# dal mio codice dietro il file in qualche script JQuery (vedi sotto). Il selettore JQuery che ho scritto accede a un GridView di ASP.Net e quindi a un campo CheckBox all'interno di gridview. Ogni volta che una casella è selezionata o deselezionata, il codice viene colpito, ma ho bisogno di accedere alla proprietà C# dal codice sottostante per prendere l'azione appropriata in base al valore della proprietà.Lettura della proprietà C# nel codice JQuery

$(".AspNet-GridView-Normal > td > input").click(function() { 

     //Need to access the C# property here 

     //Take action here based on the value of the C# property 

    }); 
+0

Ho fatto questo in Rails. Rails consente di inviare risposte javascript alle richieste AJAX, che viene poi eseguito clientide una volta ricevuto. Tuttavia il codice che genera questo javascript potrebbe avere istruzioni ruby ​​incorporate arbitrarie (ad esempio, come accedere a un attributo per determinare l'output). È possibile cercare se ASP.Net supporta qualcosa di simile. La proprietà C# esiste solo sul lato server, quindi questa logica deve essere eseguita tramite l'elaborazione lato server. – Gishu

+0

Sarà necessario modificare il valore quando si fa clic sulle caselle di controllo? Quindi, se si avvia con AvailableInstalls impostato su 10, sarà necessario incrementare/decrementare la variabile quando si fa clic sulle caselle di controllo? –

+0

Sì, la variabile dovrà essere decrementata ogni volta che viene selezionata una casella di controllo e incrementata ogni volta che una casella di controllo non è spuntata. –

risposta

12

Questo potrebbe essere ovvio, ma il codice non esiste sul lato client in cui il codice jQuery è in esecuzione. Quello che potresti fare è assegnare il valore della proprietà a un campo nascosto sul lato del server in modo che quando sarà necessario controllarlo con jQuery sul lato client sarà disponibile. Quindi si potrebbe fare quanto segue sul lato client.

Markup:

<asp:HiddenField ID="hfValueINeedToKnow" runat="server"/> 

Codice Dietro:

hfValueINeedToKnow.Value = <some value>; 

jQuery:

$("#<%= hfValueINeedToKnow.ClientID %>").val(); 

Potrebbe essere necessario apportare alcune piccole modifiche per supportare un valore per ogni riga della griglia , ma spero che questo spieghi l'idea generale.

+0

Sto avendo problemi di lettura del valore del HiddenField, ecco il codice jQuery che sto usando per accedervi:. var = availableInstalls $ ("# <% = hfAvailableInstalls.ClientID%>") val(); e sto impostando il valore del campo nascosto su "2" nel metodo PageLoad nel codice sottostante, ma ottengo sempre un valore di "undefined" per la var AvailableInstalls quando passo nella modalità di debug. Qualche idea su cosa potrebbe causare questo? –

+0

@Russ Clark: cosa viene visualizzato nel codice HTML per il campo di input nascosto e il valore di rendering effettivo nel selettore jQuery? –

+0

Per il punto, davvero utile. Grazie. Sono stato alla ricerca di questa suddivisione delle azioni per un po '. – wilsonlego

1

Beh, non è possibile.

È necessario eseguire il rendering della proprietà C# in qualche elemento (magari un campo nascosto) e quindi esaminarlo in questo modo.

Ma spiegare ulteriormente: quale proprietà stai cercando di verificare?

+0

La proprietà è solo una int nel codice sottostante, come questa: public int AvailableInstalls {get; impostato; } –

+0

Esatto, bene esegui il campo nascosto. Mark Kanof ti ha dato il codice esatto per farlo. –

0

Quello che ho fatto per questo scenario in passato è di stampare il mio valore di codice nel markup e memorizzare qualsiasi cosa sia in una variabile javascript, rendendo così una copia di esso disponibile per il codice lato client. Questo è un esempio stupido, ma si spera che ha senso:

<% 
    var messsge = "Hello World!" 
%> 

<html> 
<head> 
<script type="text/javascript"> 
    function ShowMessage() 
    { 
     var msg = '<%= message %>'; 
     if(msg) 
      alert(msg); 
    } 
</script> 
</head> 
</html> 
2

Lei ha citato in un commento che il valore è un int. E vedo che è anche una proprietà public nel codebehind. Questo è banale ora - non c'è bisogno di sfuggire il valore, né accedere in qualche modo rotonda, e si ottiene la sicurezza di tipo gratuitamente:

<script> 
$(".AspNet-GridView-Normal > td > input").click(function() { 

    var AvailableInstalls = <%= AvailableInstalls %>; 

}); 
</script> 
+0

In base al commento successivo dell'OP "la variabile dovrà essere decrementata ogni volta che una casella di controllo è selezionata e incrementata ogni volta che una casella di controllo non è spuntata" dichiara la variabile JS al di fuori della funzione, ma dovrebbe funzionare correttamente. –

0

Non c'è un modo davvero pulito per fare Questo. La soluzione migliore sarebbe probabilmente quella di utilizzare la funzionalità ClientScript.RegisterClientScriptBlock integrata in ASP.NET. Here's a good primer.

private int myValue; 

protected void Page_Load(object sender, EventArgs e) { 
    ClientScript.RegisterClientScriptBlock(typeof(Page), 
     "vars", "<script>var myParams = { p1: " + myValue + ", p2: 'My Name' };</script>"); 
} 

Questo inserirà lo script fornito nella pagina verso l'alto del modulo. Puoi cambiare anche questo. Ovviamente, non è il più bello; sei essenzialmente una concatenazione di stringhe con una lingua diversa, ma funzionerà, e per la dichiarazione di variabili semplici non è troppo dura per gli occhi.

0

ASP Embedded in JavaScript mi ​​rende sempre nervoso dal punto di vista degli attacchi di script injection e dall'impossibilità di testare il codice JavaScript.

Questa build su una risposta ealier:

<script type="text/javascript"> 
$(".AspNet-GridView-Normal > td > input").click(function() { 

    var AvailableInstalls = $("#MyHidden").val(); 

}); 
</script> 

Si potrebbe spostarlo in una variabile nascosta:

<input type="hidden" id="#MyHidden" value="<%= AvailableInstalls %>" /> 

Tuttavia questo non aggirare il problema dell'iniezione. Quindi potresti aggiungere una variabile nascosta sul lato server e impostarla dalla funzione evento Page_Load in ASP.NET.

(P.s è necessario anche l'attributo type = "text/javascript" nel tag dello script per renderlo HTML valido).

0

Se si vuole mettere il tuo valore in un asp: HiddenField con id hfValueINeedToKnow, il modo più semplice per recuperare questo lato client valore è

var jsvar = $("[id$=hfValueINeedToKnow]").val(); 

modo da poter inserire questo codice in un file .js separati.