2009-08-03 13 views
6

Este es código real de lo que estoy trabajando que toma una ID de la cadena de consulta, recupera un objeto y lo analiza en json. Voy a necesitar almacenar y manipular esta información del lado del cliente. ¿Cuál es la mejor manera de establecer la cadena json generada a un objeto del lado del cliente?¿Cuáles son algunas de las mejores prácticas para agregar de forma dinámica javascript en una página asp.net?

Nota: NewObjectCase es una clase con el método Get (strID) que devuelve un nuevo objeto. Tools.GetQueryObject (clave de cadena) es un metod que devuelven el valor de cadena de la llave

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.Script.Serialization; 
    using System.Web.UI.WebControls; 

     public partial class Testing: System.Web.UI.Page 
     { 
      protected void Page_Load(object sender, EventArgs e) 
      { 
       if (!IsPostBack) 
       { 
        string strJson = new JavaScriptSerializer().Serialize(NewObjectCase.Get(Tools.GetQueryObject("id"))); 
        // add in js to page that will set an client-side js object to this generated json 
       } 
      } 
     } 

Respuesta

1

Este es mi plan original, pero parecía que podría haber una mejor forma de agregar un objeto json y en la intellisence noté que tiene [Deprecated] al lado de Page.RegisterClientScriptBlock().

Page.RegisterClientScriptBlock("clientScript", 
    string.Format("<script type='text/javascript' language='javascript'>objCase = {0}</script>", strJson)); 
5

par de maneras simples de conseguir el trabajo hecho:

1: Utilice los ClientScriptManager.RegisterClientScriptBlock llamadas para insertar la secuencia de comandos directamente en la página:

protected void Page_Load(object sender, EventArgs e) { 

    // Not sure what your Tools.GetQueryObject is doing, but it should at 
    // the least be performing a UrlDecode to convert the string from any 
    // Url encoding, and as you're about to pass this back to javascript, 
    // you should also HtmlEncode it. 
    string valueFromCodeBehind = "var myValue = " + 
       Server.HtmlEncode(Server.UrlDecode(Request.QueryString["id"])); 

    // Get a ClientScriptManager reference from the Page class. 
    ClientScriptManager cs = Page.ClientScript; 

    // Output the script block to the page. 
    // Notes: 
    // 1) I'm passing true as the final parameter to get the script manager 
    // to auto generate the script tags for me. 
    // 2) You might need to call "RegisterStartupScript" if you need the 
    // JS variables earlier in the page. 
    cs.RegisterClientScriptBlock(this.GetType(), 
           "SetValues", 
           valueFromCodeBehind, 
           true); 
    } 
} 

2: Propiedad en el código- detrás, referenciado en el lado de la página:

En su página .aspx, algo como esto:

<script type="text/javascript"> 
    var myValue = <%=ValueFromCodeBehind%> 
</script> 

En su código detrás, se declara la variable, y asegurarse de que está establecido:

public partial class Testing: System.Web.UI.Page { 
    protected string ValueFromCodeBehind; 

    protected void Page_Load(object sender, EventArgs e) { 

    ValueFromCodeBehind = 
       Server.HtmlEncode(Server.UrlDecode(Request.QueryString["id"])); 
    } 
0

Esto registrará su secuencia de comandos en la parte superior de la página.

ClientScriptManager.RegisterClientScriptBlock Method (Type, Key as String, Script as String) 

Adición de un tipo y la clave se asegura de que sólo una versión de la secuencia de comandos se agrega a la página de ese tipo y clave.

En esta sobrecarga del método RegisterClientScriptBlock, debe asegurarse de que la secuencia de comandos proporcionada en el parámetro de secuencia de comandos se ajuste a un bloque de elementos.

Cuestiones relacionadas