2010-12-09 19 views

Respuesta

22

Usted puede simplemente escribir las variables a las que utilizan los bloques de código Javascript (<%%>):

var mJSVariable = <%:myServerSideVariable%>; 

hacer lo contrario, lo más fácil es escribir el valor JS en una del lado del servidor campo de formulario oculto y recogerlo en el lado del servidor:

<input type="hidden" id="myHiddenId" runat="server" /> 

// Javascript 
var myHidden = document.getElementById("<%:myHiddenId.ClientId%>"); 
myHidden.value = myJSVariable; 

// Code behind 
var myJSVariableValue = myHiddenId.Value; 
+1

1) en tu ejemplo, podrías haber escrito el campo de formulario 'Oculto' a la variable js. 2) podríamos hacer esto: 'var mJSvar = <%: Model.FirstNameProperty%>' – VoodooChild

+0

@VoodooChild - 1) Podría, y así es como lo haría si estuviera usando archivos JS y no JS en línea. 2) Claro, pero si 'FirstNameProperty' es una cadena, debe poner todo el bloque' <%:%> 'en comillas simples o dobles. – Oded

+0

Gracias! Respecto al # 2 - digamos que tengo un archivo JS separado y no en línea, ¿podría seguir haciendo referencia a mi Modelo? (Soy un principiante en MVC y JavaScript, y todavía me estoy acostumbrando a muchos conceptos) – VoodooChild

1

la forma en que hago normalmente es a través de un ASP.NET HiddenField.

en JS se puede establecer a través de (ejemplo jQuery):
$("input[Name$='_IDofField']").val(<newvalue>);
En ASP.NET se puede acceder a él a través de la propiedad IDofField.Value.

1

Es posible almacenar los valores de las variables de JavaScript en la variable del lado del servidor. Todo lo que tienes que hacer es implementar la clase System.Web.UI.ICallbackEventHandler.

A continuación se muestra el código que demuestra cómo hacerlo.

En aspx Página:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title>Client Calback Example</title> 
    <script type="text/ecmascript"> 
    function LookUpStock() 
    { 
     var lb=document.getElementById("tbxPassword"); 
     var product=lb.value; 
     CallServer(product,""); 
    } 

    function ReceiveServerData(rValue){ 
    } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <input type="password" id="tbxPassword" /> 
      <input type="Button" onclick="LookUpStock">Submit</button> 
     </div> 
    </form> 
</body> 

En Código Atrás (CS) Página:

public partial class _Default : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler 
{ 
protected String returnValue; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    String cbReference = Page.ClientScript.GetCallbackEventReference 
    (this,"arg", "ReceiveServerData", "context"); 
    String callbackScript; 
    callbackScript = "function CallServer(arg, context)" + 
    "{ " + cbReference + ";}"; 
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), 
    "CallServer", callbackScript, true); 
} 
public void RaiseCallbackEvent(String eventArgument) 
{ 
    if(eventArgument == null) 
    { 
     returnValue = "-1"; 
    } 
    else 
    { 
     returnValue = eventArgument; 
    } 
} 
public String GetCallbackResult() 
{ 
    return returnValue; 
} 
} 

Ahora puede obtener el valor de la variable de JavaScript del lado del servidor en product variable de returnValue.

3

puede declarar una variable en Cs del lado del servidor de archivos como public int myServerSideINT y se puede acceder a él en el archivo .aspx utilizando

<script type="text/javascript"> 
    function getServerSideVAR() 
    { 
     var serverVAR=<%= this.myServerSideINT %>; 
    } 
    </script> 

espero que esto ayuda para que

+0

Buena solución. Nota: Las cadenas siempre tienen que comenzar y terminar con ', de lo contrario, esto no funcionará ** (Ejemplo: serverVAR =' <% = this.myServerSideString%> ';) **. Por cierto: ¿Por qué se muestra esto como un sinónimo de error para mí? – BudBrot

Cuestiones relacionadas