Зацикливание списка C # в javascript

#c# #javascript #.net #list

#c# #javascript #.net #Список

Вопрос:

У меня есть список, подобный этому:

 List<string> list = new List<string>(10);

list.Add("Foo");
list.Add("Bar");
list.Add("Tord");
list.Add("Bob");
  

Как я могу зациклить список с помощью JavaScript? И как я могу написать код C # внутри JavaScript?

Комментарии:

1. Для какой платформы это предназначено? Я не уверен, что вы можете комбинировать языки подобным образом в любой среде, с которой я знаком…

2. Хорошо, прежде всего, с какой стати вы хотите писать код C # внутри вашего JavaScript? Это веб-приложение? Если вы используете C # на своем сервере и JavaScript в браузере, вам нужно сначала передать данные с сервера клиенту, вероятно, используя JSON. Затем у вас будет массив JSON, который вы можете зацикливать с помощью JavaScript. Как бы то ни было, браузер даже не сможет увидеть этот список.

Ответ №1:

Проще говоря, вы не можете написать C # внутри javascript — javascript — это язык сценариев, выполняемый на клиенте, а C # — это скомпилированный код, который выполняется на сервере.

Если вы используете ASP.NET однако вы можете выводить javascript на свою страницу, вот очень простой пример:

 void WebForm1_PreRender(object sender, EventArgs e)
{
    if (!ClientScript.IsClientScriptBlockRegistered("MyScript"))
    {
        StringBuilder sb = new StringBuilder();
        sb.AppendLine("var myArray = new Array();");
        sb.AppendLine("myArray[0] = 'some value';");
        sb.AppendLine("myArray[1] = 'another value';");
        sb.AppendLine("myArray[2] = 'yet another value';");

        ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", sb.ToString(), true);
    }
}
  

затем вы можете получить доступ к этому массиву javascript и выполнить итерацию на клиенте:

 <script language="javascript">
    //first do basic check that the array is available:
    if (typeof(myArray) != 'undefined' amp;amp; myArray != null) {
        alert(myArray[0]);
    }
</script>
  

Отсюда это простой процесс, чтобы взять ваш предварительно заполненный список и создать список javascript:

 void WebForm1_PreRender(object sender, EventArgs e)
{
    List<string> list = new List<string>(new[] { "Foo", "Bar", "Tord", "Bob" });

    if (!ClientScript.IsClientScriptBlockRegistered("MyScript"))
    {
        StringBuilder sb = new StringBuilder();
        sb.AppendLine("var myArray = new Array();");
        for (int i = 0; i < list.Count; i  )
            sb.AppendLine(string.Format("myArray[{0}] = '{1}';", i, list[i]));

        ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", sb.ToString(), true);
    }
}
  

Ответ №2:

вы можете использовать метод, который создает данные в формате json:

 public static string CreateJsonArray(List<string> list)
{
    if (list.Count > 0)
    {
        StringBuilder sb = new StringBuilder();
        foreach (string item in list)
        {
            sb.AppendFormat("'{0}',", item);
        }
        sb.Remove(sb.Length - 1, 1);
        return String.Format("[{0}]", sb.ToString());
    }
    return "[]";            
}
  

а затем присвоить его тегу javascript script

 // C#
List<string> list = new List<string>(10);

list.Add("Foo");
list.Add("Bar");
list.Add("Tord");
list.Add("Bob");

ltrResult.Text = CreateJsonArray(list);

// HTML
<script type="text/javascript">
    var arr = <asp:Literal id="ltrResult" runat="server" />;
</script>
  

Ответ №3:

@tord: по крайней мере, на данный момент вы не можете использовать код C # в вашем файле javascript. скорее всего, вам потребуется преобразовать свой список<> в некоторый эквивалент json, понятный вашему javascript. Вы можете использовать ответ.Напишите с C #, чтобы отправить json на сторону клиента

Ответ №4:

Вы могли бы либо ввести список в виде списка javascript из вашего codebehind, либо, если вы также хотите показать список, вы могли бы сделать что-то простое, как:

Передний

 <asp:Label runat="server" ID="showList"></asp:Label>
  

Код, лежащий в основе

             List<String> list = new List<string>();
            list.Add("Hello");
            list.Add("How are you doing");
            list.Add("Fine and you?");

            showList.Text  = "<ul id='jList'>";
            foreach(String val in list){
                showList.Text  = "<li>"   val   "</li>";
            }
            showList.Text  = "</ul>";
  

Затем вы можете получить доступ к «JList» из javascript с помощью GetElementByNode..