2009-08-03 3 views
6

Dies ist der tatsächliche Code von dem, woran ich arbeite, die eine ID aus der Abfragezeichenfolge abruft, ein Objekt abruft und nach json analysiert. Ich werde diese Daten clientseitig speichern und manipulieren müssen. Wie kann die generierte JSON-Zeichenfolge am besten auf ein clientseitiges Objekt festgelegt werden?Welche Best Practices zum dynamischen Hinzufügen von JavaScript in einer asp.net-Seite gibt es?

Hinweis: NewObjectCase ist eine Klasse mit der Methode Get (strID), die ein neues Objekt zurückgibt. Tools.GetQueryObject (string key) ist ein metod, die die Zeichenfolge Wert des Schlüssels

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

Antwort

1

Dieses ist mein ursprünglicher Plan zurück, aber es schien, als ob es eine sein könnte bessere Möglichkeit, ein JSON-Objekt hinzuzufügen und in der Intelligenz habe ich bemerkt, dass es [Veraltet] neben Page.RegisterClientScriptBlock() hat.

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

paar einfache Möglichkeiten, um den Job zu erledigen:

1: Verwenden Sie die ClientScriptManager.RegisterClientScriptBlock ruft das Skript direkt auf der Seite einzufügen:

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: Immobilien auf dem Code- hinter, auf der Seite verwiesen:

In Ihrer .aspx-Seite, etwa so:

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

In Ihrem Code hinter erklären Sie die Variable, und sicherzustellen, dass es eingestellt ist:

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

Dieses Skript ganz oben auf der Seite registriert.

Durch Hinzufügen eines Typs und Schlüssels wird sichergestellt, dass nur eine Version des Skripts der Seite für diesen Typ und Schlüssel hinzugefügt wird.

In dieser Überladung der RegisterClientScriptBlock-Methode müssen Sie sicherstellen, dass das im Skriptparameter angegebene Skript in einen Elementblock eingeschlossen ist.

Verwandte Themen