使用ASP.NET(C#)在JS数组中拆分和保存数据

使用ASP.NET(C#)在JS数组中拆分和保存数据,c#,javascript,jquery,asp.net,C#,Javascript,Jquery,Asp.net,我有一段代码: (我想获得标签并将它们插入一个JS数组,该数组将在HTML页面中写入,但我无法正确获得标签。你能告诉我哪里出了问题,或者帮我做这件事吗?我已经搜索了很多解决方案,但没有一个可行,标签是用逗号分隔的) ASP.NET private void Play(List<string> arraySrc, List<string> arrayTitle, List<string> arrayImage, List<string> arrayT

我有一段代码:

(我想获得标签并将它们插入一个JS数组,该数组将在HTML页面中写入,但我无法正确获得标签。你能告诉我哪里出了问题,或者帮我做这件事吗?我已经搜索了很多解决方案,但没有一个可行,标签是用逗号分隔的)

ASP.NET

private void Play(List<string> arraySrc, List<string> arrayTitle, List<string> arrayImage, List<string> arrayTags)
        {
            ...
            string[] tags = arrayTags.ToArray();
            string[] split;
            foreach (string item in tags)
            {
                if (item.IndexOf(',') != -1)
                {
                    split = item.Split(',');
                    foreach (string s in split)
                    {
                        ClientScript.RegisterArrayDeclaration("arrayTags", String.Concat("\"<span class=label>", s, "</span>\" "));
                    }
                }
                ClientScript.RegisterArrayDeclaration("arrayTags", String.Concat("\"<span class=label>", item, "</span>\" "));
            }
         }
private void Play(列表arraySrc、列表arrayttle、列表arrayImage、列表arrayTags)
{
...
string[]tags=arrayTags.ToArray();
字符串[]拆分;
foreach(标记中的字符串项)
{
if(item.IndexOf(',')!=-1)
{
拆分=项目。拆分(',');
foreach(拆分中的字符串s)
{
RegisterArrayDeclaration(“arrayTags”,String.Concat(“\”,s,“\”);
}
}
RegisterArrayDeclaration(“arrayTags”,String.Concat(“\”,item“\”);
}
}
JS

function playList () {
    disabled();
    $("#img").attr("src", "image/no-music.png");
    for (var i = 0; i < arraySrc.length; i++) {
        $("#tab1 ul").append("<li>" + (i + 1) + ". <a href='javascript:loadMusic(\"" + arraySrc[i] + "\", \"" + arrayTitle[i] + "\", \"" + arrayImage[i] + "\", \"" + arrayTags[i] + "\"); selected(" + i + ");'>" + arrayTitle[i] + "</a></li>");
    };
}
function loadMusic (musica, title, image, tags) {
    enabled();
    var audio = $("#player");      

    $("#tags").empty();

    $("#tags").append(tags);

    $("#player").attr("src", musica);
    $("#title").text(title);
    $("#img").attr("src", image);
    $("#tags span").addClass("label-info");
    /****************/
    audio[0].pause();
    audio[0].load(); //suspends and restores all audio element
    audio[0].play();
}
功能播放列表(){
禁用();
$(“#img”).attr(“src”、“image/no music.png”);
对于(var i=0;i”+(i+1)+“”;
};
}
函数加载音乐(音乐、标题、图像、标签){
启用();
var audio=$(“#播放器”);
$(“#标记”).empty();
$(“#标记”)。附加(标记);
$(“播放器”).attr(“src”,musica);
$(“#标题”)。文本(标题);
$(“img”).attr(“src”,图像);
$(“#标记span”).addClass(“标签信息”);
/****************/
音频[0]。暂停();
音频[0]。加载();//挂起并恢复所有音频元素
音频[0]。播放();
}

你用了一种错误的方法

首先,在一个循环中声明一个javascript数组对象,这意味着要多次声明一个同名数组。避免这样

其次,应该将逗号分隔的字符串值分配给要初始化的数组

所以基本上,您可以通过服务器端用javascript声明一个数组,如下所示

ClientScript.RegisterArrayDeclaration("arrayName","1,2,3,4");
or
ClientScript.RegisterArrayDeclaration("arrayName","\"One\",\"Two\",\"Three\"");
因此,其概念是,在循环内为数组创建值(逗号分隔的字符串),然后在循环之后,用创建的值注册数组

因此要这样做:

private void Play(List<string> arraySrc, List<string> arrayTitle, 
                   List<string> arrayImage, List<string> arrayTags)
{
    ...
    string[] tags = arrayTags.ToArray();
    string[] split;
    string aT="arrayTags";
    string aV=string.empty;
    foreach (string item in tags)
    {
      if (item.IndexOf(',') != -1)
      {
         split = item.Split(',');
         foreach (string s in split)
         {
            aV +="\""+ String.Concat("<span class=label>", s, "</span>"))+"\",";
         }
      }
    }
    aV = aV.SubString(0,av.Length-2);//drop the last trailing comma
    ClientScript.RegisterArrayDeclaration(aT,aV);
}
private void Play(列表arraySrc、列表arraytle、,
列表阵列图像,列表阵列标签)
{
...
string[]tags=arrayTags.ToArray();
字符串[]拆分;
字符串aT=“arrayTags”;
string aV=string.empty;
foreach(标记中的字符串项)
{
if(item.IndexOf(',')!=-1)
{
拆分=项目。拆分(',');
foreach(拆分中的字符串s)
{
aV+=“\”+字符串.Concat(“,s,”)+“\”,”;
}
}
}
aV=aV.SubString(0,aV.Length-2);//删除最后一个尾随逗号
ClientScript.RegisterArrayDeclaration(aT,aV);
}

我还没有测试过它,请注意字符串连接,但这是您应该做的。

您能给我们一个希望作为输出的Javascript示例吗?无论如何,这就是我建议你开始解决这个问题的地方。从所需的输出开始,然后向后操作。如果您只想在页面上写入所有标记,那么为什么要进行RegisterArrayDeclaration?直接写在页面上,但是标签保存在数据库中,那又怎样?您可以创建一个Webmethod并通过ajaxI检索所有标记,看看您要去哪里,但是您希望生成的Javascript数组需要看起来像什么?即,
var arr=[{ElementName1:'value',ElementName2:'value'},{…}]