инъекция данных JSON в главную страницу - PullRequest
0 голосов
/ 01 марта 2011

Я хотел бы добавить несколько javascript на каждую страницу; по сути, это строка json.

На главной странице у меня есть это:

public partial class TheMasterPage : System.Web.UI.MasterPage
{
  protected void Page_Init(object sender, EventArgs e)
    {
    if (Session["TheData"] == null) 
           {Session["TheData"] = GetData(DateTime.Today.Date;); }
    }
}

Это проверяет, содержит ли сессия данные, необходимые для сериализации json.

Что я хотел бы сделать, так это включить данные в сеансе в javascript каждой страницы.

В aspx страницы у меня есть:

<asp:ContentPlaceHolder id="head" runat="server">
   <script type="text/javascript">
      var TheJsonData =... ;
   </script>
</asp:ContentPlaceHolder>

Как мне вставить туда данные json? Если я сделаю это, что будет выполнено первым? Инъекция aspx или функция Page_Init?

Я использую следующий код для сериализации:

TheDataList = (List<MyModel>)Session["TheData"];

JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new JavaScriptConverter[] { new MyModel() });
String result = serializer.Serialize(TheDatatList);

Что я хочу сделать, это $ (document) .ready (function () {ShowData (TheJsonData)}); с переменной TheJsonData, уже загруженной при возникновении события готовности документа.

Спасибо.

1 Ответ

2 голосов
/ 02 марта 2011

Попробуйте так:

<script type="text/javascript">
    var TheJsonData = <%= new JavaScriptSerializer().Serialize(Session["TheData"]) %>;
</script>

И конечный результат должен выглядеть примерно так:

<script type="text/javascript">
    var TheJsonData = [{ prop1: 'value1', prop2: 'value2' }, { prop1: 'value3', prop2: 'value4' }];
</script>

Page_Init будет выполняться перед кодом в представлении и будет устанавливатьзначение в сеансе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...