我正在开发一个MVC网站,这是我公司做的第一个,我发现自己做的很多事情之一就是在控制器中创建选择列表,将它们放在viewdata中并在创建html.DropDownList时读取它们。对我来说,有一些事情让我觉得很臭。
有些页面可以重复列表(用户可以根据需要向酒店添加多个房间的酒店房间的房价),目前我使用相同的选择列表,这是一个好的做法还是应该他们各有一个?
在上一个例子中,“room”是一个ascx,它是通过jartery的renderpartial或ajax调用呈现的。控制器传递选择列表的最佳方法是什么,以便ascx可以使用它,目前我添加到页面的viewdata,它将viewdata传递给renderpartial,但是然后在ajax调用上action方法也需要添加ascx的Viewdata选择列表,不确定这是最好的方法。
我有一个存储库,它保存这个“静态”数据,并作为通用列表返回,因此每次控制器需要数据时,它都会访问列表的存储库(除了电路板速率之外,还有一些,像人物,先生,夫人等等的标题)我怀疑某种缓存会更好,因为数据很少发生变化。
有没有人在这些方面有任何建议?
答案 0 :(得分:3)
如果这些SelectLists完全相同,那么我最好将一个列表用于多个DropDownLists。
看起来像它的常用用法。我也使用类似的方法,但考虑将一些控件移植到Html.RenderAction,因为通过页面的ViewData来控制对我来说也不好。是的,我知道它不会是纯粹的MVC:)
如果您的ORM支持缓存,当然可以使用它。
但是如果你的项目不小并且你认为它会继续增长,我建议在你的存储库上面实现一个服务层(PoEAA模式),它将包含业务逻辑和缓存管理逻辑。
如果您想透明地管理缓存,而不影响您的dal或mvc层,我认为最好的方法是使用AOP。
答案 1 :(得分:0)
这样做的一种方法是通过键入视图将选择列表所需的数据放入模型中。视图可以迭代模型中的数据以生成所需的任何选择列表。您还可以将对象直接填充到ViewData集合中,但我认为使用类型化视图会产生更清晰的代码。