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

发布于 2024-10-10 18:01:35 字数 182 浏览 2 评论 0原文

我是 ASP.NET MVC 的新手。

我需要创建一个“自动完成标签搜索”功能,例如 stackoverflow。我的目的是使用 JsonResult 创建一个控制器来获取过滤标签以自动完成输入文本元素。这是一个好的做法吗?如果是,对我需要避免的事情有什么建议吗?

提前致谢。

PS.:抱歉英语不好。

I'm a newbie in asp.net mvc.

I need to create a 'auto-complete tag search' functionality like stackoverflow. My intent is to create a controller with JsonResult to get a filtered tag to auto-complete the input-text element. This is a good practice? If yes, any recommendations for something I need to avoid?

Thanks in advance.

PS.: Sorry for poor English.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

北恋 2024-10-17 18:01:35

即使有多个过滤器参数,也可以使用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);
    }

The solution suggested by kekekela can be used even if there are multiple filter parameters, no need to create multiple actions unless the result set is of different type. For example:

[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);
    }
泪冰清 2024-10-17 18:01:35

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

If you mean a controller action then yes, this is how I've done it. You could add a new controller but typically I've just added a method to an existing controller where it makes sense to do so.

泼猴你往哪里跑 2024-10-17 18:01:35

我根本不知道绕过控制器的理由!他们确保您的通话遵循一定的模式。自从我开始使用 MVC 包以来,我再也没有回到过直接的 php、asp 或 jsp 页面,保持代码如此漂亮并根据关注点进行分离。

I don't know of a reason to bypass controllers at all! They ensure your calls follow a pattern. I've never gone back to straight php, asp, or jsp pages since I've started using MVC packages, keeps the code so nice and separated according to concerns.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文