Estoy buscando la forma más eficiente / estándar de pasar datos entre el código JavaScript del lado del cliente y el código C # detrás de una aplicación ASP.NET. He estado usando los siguientes métodos para lograr esto, pero todos se sienten un poco falsos.
Para pasar datos de JavaScript al código de C # se deben configurar variables ASP ocultas y activar una devolución de datos:
<asp:HiddenField ID="RandomList" runat="server" />
function SetDataField(data) {
document.getElementById('<%=RandomList.ClientID%>').value = data;
}
Luego, en el código C #, recopilo la lista:
protected void GetData(object sender, EventArgs e)
{
var _list = RandomList.value;
}
Volviendo al otro lado, a menudo utilizo ScriptManager para registrar una función y pasarle datos durante Page_Load:
ScriptManager.RegisterStartupScript(this.GetType(), "Set","get("Test();",true);
o agrego atributos a los controles antes de una publicación posterior o durante las etapas de inicialización o representación previa:
Btn.Attributes.Add("onclick", "DisplayMessage("Hello");");
Estos métodos me han servido bien y hacen el trabajo, pero simplemente no se sienten completos. ¿Existe una forma más estándar de pasar datos entre JavaScript del lado del cliente y el código de fondo de C #?
He visto algunas publicaciones como esta que describen la clase HtmlElement; ¿Es esto algo que debería investigar?
fuente
Respuestas:
Puede llamar simple y fácilmente a un método de página estática desde JavaScript como en este ejemplo . Si necesita llamar al método desde varias páginas, puede configurar un servicio web y llamarlo desde Javascript de la misma manera. Ejemplo también incluido a continuación.
Código .aspx
Código subyacente
Código Javascript
NOTA: Los métodos de página deben ser estáticos. Esto podría ser problemático para usted, dependiendo de lo que la aplicación esté tratando de hacer. Sin embargo, si la información se basa en la sesión, y está utilizando algún tipo de autenticación integrada, puede colocar un atributo EnableSession en el decorador WebMethod, y eso le permitirá acceder a HttpContext.Current.User, Sesión, etc.
fuente
Recomiendo echar un vistazo a jQuery. JQuery se puede usar para realizar llamadas AJAX al servidor, que puede devolver datos en cualquier formato que necesite; un buen formato podría ser JSON, ya que se puede usar directamente en javascript.
Para extraer datos del servidor a javascript usando jQuery , las siguientes recuperaciones realizan una solicitud asincrónica a http://youserver.com/my/uri y reciben los datos del servidor en la función suministrada.
El envío de datos desde JavaScript al servidor funciona de manera similar:
fuente
Microsoft ha implementado el
UpdatePanel
control para hacer ajax, por lo que podría decirse que es la forma "estándar". Sin embargo, personalmente no recomendaría usarlo, no tiene nada que ver con el rico conjunto de funciones y el control que tiene cuando usa JavaScript directamente.Esta es la forma en que personalmente lo hago:
Cree campos ocultos para cualquier valor del lado del cliente que desee usar en una devolución de datos de página estándar (es decir, cuando el usuario presiona enviar)
En el código detrás, registre los controles que desea usar del lado del cliente.
Use una biblioteca javascript * para hacer su publicación / get ajax y luego use JavaScript para actualizar la página en función de la respuesta
Escriba una página separada "ajax" que anule el método de representación para hacer el trabajo.
* Hay muchas bibliotecas para elegir, incluso puede rodar la suya. Recomendaría jQuery , es estable y tiene un amplio conjunto de características.
fuente
JSON es la mejor forma de realizar la tarea. No mire el problema como un paso entre "C # y JavaScript". Esta forma de pensar conduce a rarezas de código como lo que tienes en la publicación original.
En términos más generales, solo se trata de pasar objetos entre el cliente y el servidor de forma independiente del lenguaje. JSON es excelente para la tarea porque es ampliamente compatible y fácil de leer.
fuente
Para establecer una etiqueta de entrada que no necesita asp del servidor, puede usar: (o <% #%> para la vinculación de datos de formularios)
html:
control de asp:
para obtener los valores en la devolución de datos
Si es así, asp controla la entrada oculta, puede usar
La mejor parte de Request.Form es que si tiene varias etiquetas con el mismo atributo "nombre", devolverá el resultado en CSV.
fuente