#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..