2

大家好,任何人都可以为我提供一个很好的例子,说明如何在带有数据库的 asp.net 中使用 Twitter Typeahead ( http://twitter.github.io/typeahead.js/ )。

谢谢

4

1 回答 1

4

在 ASP.NET MVC 中,您可以创建一个返回 JSON 的控制器操作,如下所示:

看法

@Html.TextBox("playerName")

<script type="text/javascript">

    $(function () {

        $('#playerName').typeahead({
            name: 'players',
            valueKey: 'playerName'  
            prefetch: '@Url.Action("AvaliablePlayers", "Player")',
            limit: 10
        });

    });

</script>

控制器和动作

public class PlayerController : Controller
{    
    public JsonResult AvaliablePlayers(int groupId)
    {
        var group = _groupRepository.GetById(groupId);


        return Json(group.Players.Select(p => new { playerId = p.PlayerID, playerName = p.Name), JsonRequestBehavior.AllowGet);
    }
}

在 ASP.NET WebForms 中,您可以使用自定义 HTTP 处理程序以 JSON 格式返回数据,如下所示:

默认.aspx

<asp:TextBox id="country" CssClass="countryTypeAhead" runat="server"></asp:TextBox>

<script type="text/javascript">

    $(function () {

        $('.countryTypeAhead').typeahead({
            name: 'countries', 
            prefetch: '<%= Page.ResolveClientUrl("~/Countries.ashx") %>',
            limit: 10
        });

    });

</script>

将新Generic Handler (.ashx)命名的国家添加到您的项目中。这是处理程序的代码隐藏:

public class Countries : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/json";

            var cntries = new List<string>() {"Slovenia", "Italy", "Germany", "Austria"}; 

            JavaScriptSerializer jsSerializer = new JavaScriptSerializer();

            context.Response.Write(jsSerializer.Serialize(cntries));

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

此示例使用JavaScriptSerializerASP.NET 3.5 及更高版本中可用的。如果您使用的是 3.5 以上版本的 asp.net,则可以使用JSON.NET将 typeahead 结果转换为 JSON 格式。

于 2013-10-29T13:38:45.900 回答