1

我有这段代码:

(我想获取标签并将它们插入到将写入 HTML 页面的 JS 数组中,但我无法正确获取标签,您能告诉我有什么问题吗,或者帮我这样做,我已经搜索了很多解决方案,但没有一个在这里工作,标签用逗号分隔)

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>\" "));
            }
         }

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();
}
4

1 回答 1

3

你做错了。

首先,您要在循环中声明一个 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);
}

我没有测试过,注意字符串连接,但你应该这样做。

于 2013-04-01T15:58:12.517 回答