使用Json在循环中进行变量声明

时间:2014-07-30 07:31:22

标签: c# asp.net json

这是控制器中的代码。

public JsonResult directory()
{
    List<string> alp = new List<string>();
    var alp1 = new List<directories>();
    string array = "";
    int a = 0;
    for (a = 0; a <= 25; a++)
    {
        int unicode = a + 65;
        char character = (char)unicode;
        string text1 = character.ToString();
        string url1 = "<a href='/Directories/?search=" + text1 + "' 'rel=" + text1 + "'>";
        string alpha = text1;
        alp.Add(url1);
        alphatxt.Add(alpha);
    }
    var alphaa = alp1.Add(new directories { arrary = url1, character = alphatxt });
    return Json(alphaa, JsonRequestBehavior.AllowGet);
}

public class directories
{
    public int a { get; set; }
    public int unicode { get; set; }
    public char character { get; set; }
    public string[] arrary { get; set; }
}

输出来自

alp.Add(url1);
alp.Add(alpha);

如何在循环外调用这两个输出。

这样我将通过返回获得输出

Json(alphaa, JsonRequestBehavior.AllowGet);

但我不知道如何将输出声明为循环外的变量。

3 个答案:

答案 0 :(得分:2)

如果您正在尝试构建一个网址列表,每个字母一个,那么您可以简单地执行以下操作:

public List<Directory> GetDirectories()
{
    var dirs = new List<Directory>();
    for (var ch = 'A'; ch <= 'Z'; ch++)
    {
        var url = string.Format(
            "<a href='/Directories/?search={0}' rel='{0}'>", ch);

        dirs.Add(new Directory() { Character = ch, Url = url });
    }
    return dirs;
}

// Directory class is simplifed a bit in this example
public class Directory
{
    public char Character { get; set; }
    public string Url { get; set; }
}

然后只需使用单独的方法将其转换为JSON:

public JsonResult directory()
{
    var dirs = GetDirectories();
    return Json(dirs, JsonRequestBehavior.AllowGet);
}

使用LINQ,它可以简化为:

private static readonly string Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public List<Directory> GetDirectories()
{
    return Alphabet
        .Select(ch => new Directory() { Character = ch, Url = CreateUrl(ch) })
        .ToList();
}

private string CreateUrl(char ch)
{
    return string.Format("<a href='/Directories/?search={0}' 'rel={0}'>", ch);
}

您的代码现在的样子,看起来您根本不需要在服务器端创建此列表(您正在传输一堆几乎相同的硬编码URL,可以轻松创建在客户端使用JavaScript),所以我假设您使用此查询传输了一些其他数据?

答案 1 :(得分:1)

您可以访问JsonResult.Data属性,但我并不认为这是您需要的。我建议创建一个返回实际结果的方法,并在您的操作中调用该方法并将其序列化为JSON:

public JsonResult directory()
{
    return Json(this.GetDirectories(), JsonRequestBehavior.AllowGet);
}

private List<directories> GetDirectories()
{
    ... // your original code
}

答案 2 :(得分:0)

我试过很多方面,最后有想法用这种方式,

我的代码如下所示。

public JsonResult directory()
        {


            List<string> alp = new List<string>();
            var alp1 = new List<directories>();
            string array = "";
            int a = 0;
            for (a = 0; a <= 25; a++)
            {
                int unicode = a + 65;
                char character = (char)unicode;
                string text1 = character.ToString();
                string url1 = "<a href='/Directories/?search=" + text1 + "' 'rel=" + text1 + "'>";
                string alpha = text1;
                alp.Add(url1);
                alp.Add(alpha);
                alp1.Add(new directories { dirurl = url1, text = alpha });
            }

            return Json(alp1, JsonRequestBehavior.AllowGet);
        }


        public class directories
        {

            public string text { get; set; }
            public string dirurl { get; set; }
        }


    }
}