好的做法是为自动完成过滤器创建一个控制器吗?

时间:2011-01-07 00:33:02

标签: json asp.net-mvc-2 autocomplete

我是asp.net mvc的新手。

我需要创建像stackoverflow这样的'自动完成标记搜索'功能。我的目的是使用JsonResult创建一个控制器,以获取一个过滤的标签来自动完成输入文本元素。这是一个好习惯吗?如果是,我需要避免任何建议?

提前致谢。

PS:抱歉英语不好。

3 个答案:

答案 0 :(得分:1)

如果你的意思是控制器动作然后是,那就是我这样做的。您可以添加一个新的控制器,但通常我只是在现有控制器中添加了一个方法,这样做是有意义的。

答案 1 :(得分:1)

我根本不知道绕过控制器的原因!他们确保您的呼叫遵循模式。我从来没有回到直接的php,asp或jsp页面,因为我已经开始使用MVC包,保持代码如此美观并根据顾虑分开。

答案 2 :(得分:1)

即使有多个过滤器参数,也可以使用kekekela建议的解决方案,除非结果集的类型不同,否则无需创建多个操作。例如:

[HttpPost]
    [Authorize]
    public JsonResult FilterTasks(int maxResults, string users = "", string tags = "", string categories = "")
    {
        List<int> userIdList = MyHelper.GetIntList(users);
        List<string> tagNameList = MyHelper.GetStringList(tags);
        List<string> categoryIdList = MyHelper.GetStringList(categories);
        var tasks = from task in projectsEntities.Tasks select task;
        if (userIdList.Count >  0)
            tasks = tasks.Where(task => userIdList.Contains(task.UserId));
        if (tagNameList.Count > 0)
            tasks = tasks.Where(task => tagNameList.Contains(task.TagName));
        if (categoryIdList.Count > 0)
            tasks = tasks.Where(task => categoryIdList.Contains(task.CategoryId));
        var topTasks = tasks.Take(maxResults).ToArray();
        return Json(topTasks);
    }