使用javascript在MVC4中使用JSon

时间:2014-02-15 07:23:13

标签: c# javascript json linq asp.net-mvc-4

我是JavaScript新手.... 我在数据库中有数据...... 我通过使用linQ得到它如下

 public List<SelectListItem> getTokens()
    {
        var tokens = from T in db.tokens select T;
        List<SelectListItem> items = new List<SelectListItem>();
        foreach (var t in tokens)
        {
          items.Add(new SelectListItem { Value = t.id.ToString(), Text = t.tname });
        }

        return items.ToList<SelectListItem>;
 }

或者

 public string getTokens()
 {
  var tokens = from T in db.tokens select T;
  string s = "[";
        foreach (var t in tokens)
        {
            s += "{ id:" + t.id.ToString() + ", name: " + t.tname + "},";
        }
        s += "]";
        return s;
}

我想将该字符串/ List传递给我的JS函数......就像这样...

$(document).ready(function() {
        $("#demo-theme").tokenInput([
            { id: 7, name: "Ruby" },
            { id: 11, name: "Python" },
            { id: 13, name: "JavaScript" },
            { id: 17, name: "ActionScript" },
            { id: 19, name: "Scheme" },
            { id: 23, name: "Lisp" },
            { id: 29, name: "C#" },
            { id: 31, name: "Fortran" },
            { id: 37, name: "Visual Basic" },
            { id: 41, name: "C" },
            { id: 43, name: "C++" },
            { id: 47, name: "Java" }],
            {theme: "ab"
        });
    });

我需要用我的字符串/列表替换第一个项目列表... 或任何其他方式通过....

2 个答案:

答案 0 :(得分:1)

你的第二个几乎就在那里,你只需要将它转换为JSON响应,而不需要自己尝试序列化。

public JsonResult getTokens()
{
    return Json(db.tokens.ToList(), JsonRequestBehavior.AllowGet);
}

然后这将从一个AJAX请求返回,正是你要传递给javascript方法的那个(假设一个令牌没有你想要去除的额外属性)。

<强>更新: 可以在https://api.jquery.com/jQuery.ajax/

找到Jquery Ajax文档

但是,让我为您提供一个简单的替代方案,以防您只是尝试将对象转换为JavaScript并且它不需要/想要异步。您只需使用列出所有令牌的字段更新MVC ViewModel,然后将其传递到视图中的脚本中。

public ActionResult YourExistingAction()
{
    YourExistingViewModel model = new YourExistingViewModel();
    model.Tokens = db.tokens.ToList();
    return View(model);
}

然后以您的观点:

@model YourExistingViewModel

<script>
    var tokens = @Html.Raw(Json.Encode(Model.Tokens));
    $(function() {
        $("#demo-theme").tokenInput(tokens, { theme: "ab" });
    });
</script>

答案 1 :(得分:0)

public JsonResult getTokens()
{
    var tokens = from T in db.tokens select T;
    var items = tokens.Select(t =>
        new SelectListItem { Value = t.id.ToString(), Text = t.tname });

    return Json(items, JsonRequestBehavior.AllowGet);
}