Typeahead / bootstrap-tagsinput与MVC控制器无法正常工作

时间:2018-04-27 06:49:06

标签: javascript asp.net-mvc twitter-bootstrap typehead

我想在asp.net MVC中实现标记功能我已经参考了“Bootstrap Tags”。以下是适合我的示例代码。在URL中我已经传递了静态JSON文件路径。

    var citynames = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: {
        //url: 'http://localhost:20182/Home/JsonData',
        url: '../Content/citynames.json',

        filter: function (list) {
            return $.map(list, function (cityname) {
                return { name: cityname };
            });
        }
    }
});
citynames.initialize();

var elt = $('.example_typeahead > > input');

elt.tagsinput({
    typeaheadjs: {
        name: 'cityname',
        displayKey: 'name',
        valueKey: 'name',
        source: citynames.ttAdapter()
    }});

但是一旦我用控制器更改了URL,它将无法正常工作。我刚刚用完整的URL和控制器和动作更改了URL。

    prefetch: {
    url: 'http://localhost:20182/Home/JsonData',
    //url: '../Content/citynames.json',

    filter: function (list) {
        return $.map(list, function (cityname) {
            return { name: cityname };
        });
    }
}

我的行动如下

    public JsonResult JsonData()
    {
        var data = System.IO.File.ReadAllText(Server.MapPath(@"~/Content/citynames.json"));
        return Json(data, JsonRequestBehavior.AllowGet);

    }

请让我知道如何使用控制器和操作传递json数据,而不是使用json文件URL中的静态数据!!!

1 个答案:

答案 0 :(得分:0)

您的第一个选项有效意味着您的citynames.json文件格式正确JSON,因此无需使用return Json(data, ...);再次序列化它(如果您这样做,那么您需要使用脚本中的JSON.parse()再次解析它。

相反,只需将数据作为ContentResult

返回
public ContentResult JsonData()
{
    var data = System.IO.File.ReadAllText(Server.MapPath(@"~/Content/citynames.json"));
    return Content(data);

}