Каковы некоторые рекомендации для динамического добавления JavaScript на странице asp.net? - PullRequest
6 голосов
/ 03 августа 2009

Это настоящий код из того, над чем я работаю, который берет идентификатор из строки запроса, получает объект и анализирует его в json. Я собираюсь хранить и манипулировать этими данными на стороне клиента. Каков наилучший способ установить сгенерированную строку json для объекта на стороне клиента?

Примечание. NewObjectCase - это класс с методом Get (strID), который возвращает новый объект. Tools.GetQueryObject (string key) - это метод, который возвращает строковое значение ключа

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

Ответы [ 4 ]

5 голосов
/ 04 августа 2009

Пара простых способов получить работу:

1: используйте вызовы ClientScriptManager.RegisterClientScriptBlock , чтобы вставить скрипт непосредственно на страницу:

  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: свойство в выделенном фрагменте кода, указанное на странице:

На вашей странице .aspx, что-то вроде этого:

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

В своем коде вы объявляете переменную и гарантируете, что она установлена:

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"]));
  }
1 голос
/ 04 августа 2009

Это мой первоначальный план, но казалось, что может быть лучший способ добавить объект json, и я обнаружил, что у него есть [Устарело] рядом с Page.RegisterClientScriptBlock ().

Page.RegisterClientScriptBlock("clientScript",
    string.Format("<script type='text/javascript' language='javascript'>objCase = {0}</script>", strJson));
0 голосов
/ 19 декабря 2013

Это зарегистрирует ваш скрипт в верхней части страницы.

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

Добавление типа и ключа гарантирует, что только одна версия скрипта будет добавлена ​​на страницу для этого типа и ключа.

В этой перегрузке метода RegisterClientScriptBlock необходимо убедиться, что сценарий, указанный в параметре script, заключен в блок элемента.

0 голосов
/ 04 августа 2009

Найдено на Добавление ссылки на файл Javascript на главной странице

protected void Page_Load(object sender, EventArgs e)
{
  Page.ClientScript.RegisterClientScriptInclude("somescript", ResolveUrl("some.js"));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...