2012-07-24 13 views
5

que tienen algo de código en JavaScript así:envío de una cadena como JSON de C# para Javascript

slider.setPhotos([ 
    { "src": "image1", "name": "n1" }, 
    { "src": "image2", "name": "n2" }, 
    { "src": "image3", "name": "n3" } 
    ]); 

y quiero establecer los valores de src y name de C#.

asumir valores son como este en C#:

var images = new string[] {"/images/a1.jpg", "/images/a2.jpg", "/images/a3.jpg"}; 

var names = new string[] {"First", "Second", "Third"}; 

¿Cómo se establecen estos valores en JavaScript código (es decir, en Página método Load en código C#)?

+1

¿Qué le parece simplemente usar ajax para buscar esto? –

Respuesta

6

En el servidor necesita serializar los datos como JSON y luego puede escribirlos en la respuesta como HTML usando algo así como un campo de entrada oculto.

Por ejemplo, puede utilizar la biblioteca NewtonSoft JSON serializar el JSON (que está integrado en ASP MVC 4 sin embargo, es fácil de instalar con Nuget)

string json = Newtonsoft.Json.JsonConvert.SerializeObject(images); 

luego hacer el JSON en el HTML (hay una serie de métodos para hacer esto) por ej.

Response.Write(string.Concat("<input id='data' type='hidden' value='", json, "' />"); 

o

HiddenField jsonField = new HiddenField 
{ 
    ID = "data" 
}; 
jsonField.Value = json; 
this.Controls.Add(jsonField); 

o incluso escribir directamente como script de saltarse la necesidad de analizar en el cliente (todavía tienden a utilizar el método HTML para evitar problemas con las devoluciones de datos Paneles/Actualizar causando el guión para ser ejecutado varias veces)

Response.Write(string.Concat("<script type='text/javascript'> var images = ", json, ";</script>"); 

En el cliente puede leer este JSON desde el HTML y analizarlo. En los navegadores modernos esto está integrado, o puede rellenar con algo como JSON2

p.

var field = document.getElenentById('data'); 
var images = JSON.parse(field.value); 

A continuación, tiene acceso a los datos como un objeto Javascript.

+0

Incluso podría generar una etiqueta de script que defina los datos y no tener que preocuparse por obtener el elemento o analizarlo. – Rawling

+0

@Rawling, eso es cierto, tengo ese método para mi respuesta. –

+0

Tnx @ChrisHerring. Excelente respuesta – MSajjadi

2

Suponiendo que images y names son de igual longitud Puede utilizar esta

StringBuilder str = new StringBuilder(); 

var images = new string[] {"/images/a1.jpg", "/images/a2.jpg", "/images/a3.jpg"}; 
var names = new string[] {"First", "Second", "Third"}; 

str.AppendLine("slider.setPhotos(["); 
for(int i=0; i< images.Length; i++) 
{ 
    str.AppendLine("{ \"src\": "+ images[i] +", \"name\": "+ names[i] +" }"); 
    str.AppendLine((i==images.Length-1 ? "]);":",")); 
} 

Page.ClientScript.RegisterClientScriptBlock(
       this.GetType(), "Key007", str.ToString(), true); 

Este código se inserte un bloque de script cuando se carga la página y después de eso se puede usar ese bloque de script cualquier lugar de su código del lado del cliente.

Cuestiones relacionadas