Динамически создавать массив JavaScript с кодом C # позади - PullRequest
5 голосов
/ 07 мая 2011

Я обновляю старый классический сайт ASP до новой версии .net 3.5.На странице есть собственный элемент управления списком, который хочет сохранить клиент (мой начальник).Этот список управления требует несколько массивов для правильной работы.массив представляет собой многомерный список публикаций.Вот как это выглядит:

var publicationTable = [
    [31422,"Abilene Reporter News","Abilene","TX",false,"D",0],
    [313844,"Acadiana Weekly","Opelousas","LA",false,"W",1],
    [527825,"Action Advertiser","Fond du Lac","WI",false,"W",2]...n]

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

Ответы [ 3 ]

16 голосов
/ 07 мая 2011

Вы должны сделать это:

Код:

using System.Web.Script.Serialization;
...
public string getJson(){
   var publicationTable = new List<object>{
      new []{ 31422,"Abilene Reporter News","Abilene","TX",false,"D",0},
      new []{ 313844,"Acadiana Weekly","Opelousas","LA",false,"W",1 },
      new []{ 527825,"Action Advertiser","Fond du Lac","WI",false,"W",2}
   };
   return (new JavaScriptSerializer()).Serialize(publicationTable);
}

Как видите, для создания массива смешанных типов мы создаем массив анонимного типа с new []. Вы могли бы также сделать это с new object[].

Файл aspx:

<script>
    var publicationTable = <%= getJson() %>;
</script>

Надеюсь, это поможет. Приветствия

1 голос
/ 07 мая 2011

Я думаю, что List<List<object>>, содержащий ваши предметы, , пройденный через JavaScriptSerializer, сработает. Учитывая, что эти данные, вероятно, поступают из более структурированного типа данных, вы, вероятно, могли бы сделать лучше, чем List<List<object>>, но JavaScriptSerializer, вероятно, то, что вам нужно.

0 голосов
/ 07 мая 2011

Будет ли это работать?

ArrayList list = new ArrayList{31422,"Abilene Reporter News","Abilene","TX",false,"D",0};

var str = string.Format("[{0}]", list.Cast<object>().Select(x => (x is string)?
          string.Format(@"""{0}""", x) : x.ToString())
          .Aggregate((x, y) => string.Format("{0}, {1}", x, y)));

аналогичным образом может быть расширен для многомерного массива.

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