Json 良好实践是否为自动完成过滤器创建控制器?

Json 良好实践是否为自动完成过滤器创建控制器?,json,asp.net-mvc-2,autocomplete,Json,Asp.net Mvc 2,Autocomplete,我是asp.NETMVC的新手 我需要创建“自动完成标记搜索”功能,如stackoverflow。我的意图是使用JsonResult创建一个控制器,以获得一个过滤标记,从而自动完成输入文本元素。这是个好习惯吗?如果是的话,有什么我需要避免的建议吗 提前谢谢 注:很抱歉英语不好。如果你指的是控制器动作,那么是的,我就是这样做的。您可以添加一个新控制器,但通常我只是在现有控制器中添加了一个有意义的方法。如果您指的是控制器操作,那么是的,我就是这样做的。您可以添加一个新控制器,但通常我只是在现有控制器

我是asp.NETMVC的新手

我需要创建“自动完成标记搜索”功能,如stackoverflow。我的意图是使用JsonResult创建一个控制器,以获得一个过滤标记,从而自动完成输入文本元素。这是个好习惯吗?如果是的话,有什么我需要避免的建议吗

提前谢谢


注:很抱歉英语不好。

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

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

我根本不知道绕过控制器的原因!他们确保你的电话遵循一种模式。自从我开始使用MVC软件包以来,我就再也没有回到过直接的php、asp或jsp页面,代码保持得很好,并根据关注点进行分离。

我根本不知道为什么要绕过控制器!他们确保你的电话遵循一种模式。自从我开始使用MVC包以来,我从来没有回到过直接的php、asp或jsp页面,使代码保持良好状态,并根据关注点进行分离。

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);
    }
[HttpPost]
[授权]
公共JsonResult FilterTasks(int-maxResults,string-users=“”,string-tags=“”,string-categories=“”)
{
List userIdList=MyHelper.GetIntList(用户);
List tagNameList=MyHelper.GetStringList(标记);
List categoryIdList=MyHelper.GetStringList(类别);
var tasks=来自ProjectSenties中的任务。任务选择任务;
如果(userIdList.Count>0)
tasks=tasks.Where(task=>userIdList.Contains(task.UserId));
如果(tagNameList.Count>0)
tasks=tasks.Where(task=>tagNameList.Contains(task.TagName));
如果(categoryIdList.Count>0)
tasks=tasks.Where(task=>categoryIdList.Contains(task.CategoryId));
var topttasks=tasks.Take(maxResults.ToArray();
返回Json(topTasks);
}

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

[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);
    }
[HttpPost]
[授权]
公共JsonResult FilterTasks(int-maxResults,string-users=“”,string-tags=“”,string-categories=“”)
{
List userIdList=MyHelper.GetIntList(用户);
List tagNameList=MyHelper.GetStringList(标记);
List categoryIdList=MyHelper.GetStringList(类别);
var tasks=来自ProjectSenties中的任务。任务选择任务;
如果(userIdList.Count>0)
tasks=tasks.Where(task=>userIdList.Contains(task.UserId));
如果(tagNameList.Count>0)
tasks=tasks.Where(task=>tagNameList.Contains(task.TagName));
如果(categoryIdList.Count>0)
tasks=tasks.Where(task=>categoryIdList.Contains(task.CategoryId));
var topttasks=tasks.Take(maxResults.ToArray();
返回Json(topTasks);
}

谢谢你的回答!如果我需要很多过滤器?为我的所有过滤器创建一个控制器是一个好的做法吗?例如:/filter/tags/、/filter/users、/filter/categories等。感谢您的回答!如果我需要很多过滤器?为我的所有过滤器创建一个控制器是一个好的做法吗?例如:/filter/tags/,/filter/users,/filter/categories等。