2009-08-03 11 views
6

To jest rzeczywisty kod z tego, nad którym pracuję, który pobiera identyfikator z ciągu zapytania, pobiera obiekt i analizuje do json. Będę musiał przechowywać i manipulować tą stroną klienta po stronie danych. Jaki jest najlepszy sposób ustawienia wygenerowanego łańcucha json na obiekt po stronie klienta?Jakie są najlepsze praktyki dotyczące dynamicznego dodawania javascript na stronie asp.net?

Uwaga: NewObjectCase jest klasą z metodą Get (strID), która zwraca nowy obiekt. Tools.GetQueryObject (string key) jest Metod, które zwracają wartość ciągu kluczowej

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

Odpowiedz

1

To jest mój pierwotny plan, ale wydawało się, że nie może być lepszy sposób dodania obiektu json, aw intellisence zauważyłem, że ma [Przestarzałe] obok Page.RegisterClientScriptBlock().

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

Kilka prostych sposobów na uzyskanie zadanie:

1: Użyj połączeń ClientScriptManager.RegisterClientScriptBlock wstawić skrypt bezpośrednio na stronie:

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: obiekt na Code z tyłu, wymieniono na stronie:

Na stronie .aspx coś takiego:

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

W kodzie tyłu, zadeklarować zmienną, i upewnić się, że jest ustawiony:

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

ten zarejestruje swój skrypt na górze strony.

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

Dodanie klucza i typu powoduje, że do strony tego typu i klucza jest dodawana tylko jedna wersja skryptu.

W tym przeciążeniu metody RegisterClientScriptBlock należy upewnić się, że skrypt zawarty w parametrze skryptu jest zawinięty w blok elementu.

Powiązane problemy