gpt4 book ai didi

c# - 获取多项选择列表并在 MVC 中显示它们的推荐方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 19:44:10 26 4
gpt4 key购买 nike

我已经搜索了 SO 和谷歌,但没有找到相关/可接受的答案。
背景:
* 使用 MVC 4.5
* 我有一些通用的 Repo<T>我在 EF5 的顶部使用它,而 EF5 又可以通过通用 Service<T> 访问
* 我有域模型和 View 模型,我正在使用 Automapper 在它们之间进行映射,此映射发生在 Service 中图层
* 最重要的是,我有我的 Controllers这又是尽可能通用的。

所以,对于这个问题;我有几个场景,我需要向用户提供一个选项列表,他们必须选择一个或多个。这些选项是特定于用户的,所以我的域 User有一个 List<Location>这是他们保存的位置,添加/修改时,Item , 他们需要至少选择一个 Location .

我抵制诱惑去拿那个 List<Location>在我的 Controller 中,因为我想让它们保持通用和 slim ,但与此同时,我宁愿在我的 ItemView 中没有两个属性模型,一个用于 AvailableLocations和一个 SelectedLocations ,因为这个模型不仅用于添加/修改,还用于搜索结果等。

选项:
* 我是否应该引入不同的模型来添加/修改 Item ,例如ItemInput ?
* 我是否应该使用一些自定义映射并让 Automapper 获取可用位置列表?
* 我应该在哪一层获取这些可用位置?

请问人们对此有何简洁和通用的建议?
非常感谢!

最佳答案

我会做这样的事情:

    public IEnumerable<Location> GetLocations() {
return db.GetAll();
}

然后在你的 Controller 内部(我从 MVC 脚手架中遵循了这个):

 ViewBag.Locations = new SelectList(service.GetLocations, "name", "id");

(或您自己的复选框列表)并在 HTML/View 页面上放置一个列表控件。

我认为这是最佳方法的原因是因为逻辑都驻留在服务内部。如果你把它放在你的 DTO/数据模型中,你可能会遇到这个问题:

如果您需要额外的逻辑来拉回位置会怎样?即位置的子位置。

您更改服务(或覆盖)以反射(reflect)新的更改,并且此逻辑将进入服务内部:

    public IEnumerable<Location> GetLocations(string parent) {
return db.GetAll().Where(loc => loc.parentname = parent);
}

附注我从不使用通用服务,我拥有服务的原因是因为它提供的某些数据访问包含不适合通用 DAL 的逻辑。

我可以制作一个接口(interface)或抽象服务,让我的生活更轻松一些服务之间的共同操作,但是一旦你定义了一个具体的 UserManagementSerive,你肯定是在说你想要管理一个对象有用户、位置和项目,每个都有自己的特定功能?

关于c# - 获取多项选择列表并在 MVC 中显示它们的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16303723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com