2009-08-03 3 views
6

C'est le code réel de ce que je suis en train de travailler qui prend un ID de la chaîne de requête, récupère un objet et analyse en json. Je vais devoir stocker et manipuler ce côté client de données. Quelle est la meilleure façon de définir la chaîne JSON générée à un objet côté client?Quelles sont les meilleures pratiques pour ajouter dynamiquement du javascript dans une page asp.net?

Remarque: NewObjectCase est une classe avec la méthode Get (strID) qui renvoie un nouvel objet. Tools.GetQueryObject (touche string) est une metod qui retourne la valeur de chaîne de la

clé
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 
       } 
      } 
     } 

Répondre

1

Ceci est mon plan initial, mais il semblait qu'il pourrait y avoir un meilleure façon d'ajouter un objet json et dans l'intellisence j'ai remarqué qu'il a [déprécié] à côté de Page.RegisterClientScriptBlock().

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

Couple de simples façons de faire le travail:

1: Utilisez les appels ClientScriptManager.RegisterClientScriptBlock pour insérer le script directement sur la page:

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: Propriété sur le code- derrière, référencé sur le côté de la page:

Dans votre page .aspx, quelque chose comme ceci:

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

Dans votre code derrière, vous déclarez la variable, et assurez-vous qu'il est mis:

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

Ce enregistrera votre script en haut de la page. L'ajout d'un type et d'une clé permet de s'assurer qu'une seule version du script est ajoutée à la page pour ce type et cette clé.

Dans cette surcharge de la méthode RegisterClientScriptBlock, vous devez vous assurer que le script fourni dans le paramètre de script est enveloppé dans un bloc d'éléments.

Questions connexes