c# - 自动完成:用 json 数据显示结果

标签 c# javascript jquery asp.net-mvc autocomplete

我正在尝试构建一个自动完成功能,但我在修补各个部分时遇到了麻烦。

首先,我的观点包括这个字段:

<p>@Html.TextBoxFor(_item => _item.mCardName, Model.mCardName, new { @class = "cardText", id = "card_name"} )  </p>

非常简单。接下来,JavaScript 调用:

<script type="text/javascript">
    $(function() {
        $('#card_name').autocomplete({
            minlength: 5,
            source: "@Url.Action("ListNames", "Card")",
            select: function (event, ui) {
                $('#card_name').text(ui.item.value);
            },
        });
    });
</script>

调用此方法:

public ActionResult ListNames(string _term)
{
    using (BlueBerry_MTGEntities db = new BlueBerry_MTGEntities())
    {
        db.Database.Connection.Open();

        var results = (from c in db.CARD
                   where c.CARD_NAME.ToLower().StartsWith(_term.ToLower())
                   select new {c.CARD_NAME}).Distinct().ToList();

        JsonResult result = Json(results.ToList(), JsonRequestBehavior.AllowGet);

        return Json(result, JsonRequestBehavior.AllowGet);
    }
}

如果我插入“Power”一词,JSON 数据将像这样发回:

{"ContentEncoding":null,"ContentType":null,"Data":[{"CARD_NAME":"Power Armor"},{"CARD_NAME":"Power Armor (Foil)"},{"CARD_NAME":"Power Artifact"},{"CARD_NAME":"Power Conduit"},{"CARD_NAME":"Power Conduit (Foil)"},{"CARD_NAME":"Power Leak"},{"CARD_NAME":"Power Matrix"},{"CARD_NAME":"Power Matrix (Foil)"},{"CARD_NAME":"Power of Fire"},{"CARD_NAME":"Power of Fire (Foil)"},{"CARD_NAME":"Power Sink"},{"CARD_NAME":"Power Sink (Foil)"},{"CARD_NAME":"Power Surge"},{"CARD_NAME":"Power Taint"},{"CARD_NAME":"Powerleech"},{"CARD_NAME":"Powerstone Minefield"},{"CARD_NAME":"Powerstone Minefield (Foil)"}],"JsonRequestBehavior":0,"MaxJsonLength":null,"RecursionLimit":null}

出于引用目的,以下是运行的两个脚本:

<script src="/Scripts/jquery-2.0.3.js"></script>
<script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>

但是什么也没有显示。我希望看到结果像正常的自动完成一样显示。谁能帮我让事情顺利进行吗?

编辑

我已经为此工作了一段时间。我已经在那里发布了新的 javascript、 Controller 方法和获得的结果。但事情仍然不起作用,我将不胜感激任何帮助。

最佳答案

对于自动完成,我使用 javascriptserializer 类。代码是这样的。

My.Response.ContentType = "application/json"
Dim serializer As JavaScriptSerializer = New JavaScriptSerializer
Dim dt As DataTable = GetDataTable("proc_name", My.Request.QueryString("term"))
Dim orgArray As ArrayList = New ArrayList
For Each row As DataRow In dt.Rows
    Dim thisorg As New thisOrg
        thisorg.id = row("organization_child_id")
        thisorg.value = row("organization_name")
        orgArray.Add(thisorg)
Next
My.Response.Write(serializer.Serialize(orgArray))

Public Class thisOrg
    Public id As Integer
    Public value As String
End Class

基本上只是获取一个数据表,将一系列对象添加到数组中,然后将其序列化。

关于c# - 自动完成:用 json 数据显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21538718/

相关文章:

c# windows 控件,显示多线程软件中文件的下载进度状态

javascript - AngularJS如何在多个ajax请求成功后调用函数?

javascript - 向按钮添加 onclick 事件会导致页面错误

jquery - html div滚动条错误

c# - Firebird 在 .NET 中发送所有事件

c# - 在 .Net 中使用哪种货币舍入算法?

javascript - 检测按键事件(移动设备)

javascript - jQuery/HTML DOM 方法参数

c# - 在 C# 代码中查找未捕获的异常

javascript - 在 JavaScript 中向用户隐藏 Solr 服务器 URL