在MVC应用程序中列出国家列表的最佳做法在哪里?

时间:2012-01-25 20:04:13

标签: asp.net-mvc razor model-view

在繁重的环境应用程序中,我们有用户,位置,bla bla bla ...我们在许多情况下使用对服务的调用来检索国家/地区列表。

实施此目的的“最佳实践”或“正确方法”在哪里。在多个地方调用此方法,许多对象具有List<CountryVO>属性。

特别考虑使用Razor视图,经常需要将此属性添加到ModelViews

解决方案是使用DAL / BLL / SERVICE / UI [s]架构。

真实示例:

public class User {
...
...
public List<DeliveryZoneVO> DeliveryZones {get;set;}
    public User() {
    ...
        DeliveryZones = service.GetDeliveryZones().ToList();
    }
}

DeliveryZoneVO类来自webservice,因此一个属性是

int IdCountry

类User有一个在类上显示的DeliveryZoneVO列表,这里的'问题'是因为它从Web服务检索数据,我只有国家的ID。

当我在控制器中准备数据以发送到视图时:

UserModelView userMV = new UserModelView();
userMV.user = service.GetUserById(1);
ViewData.Model = userMV;

但是,在userMV.user中,我有一个DeliveryZones,其中包含一个带有IdCountries的DeliveryZoneVO对象列表。

在视图中,当我这样做时(例如):

@DisplayFor(m => m.user.DeliveryZones)

我想显示国家/地区名称,只有ID。所以我需要在某个地方引用..问题在于需要放置哪些数据才被认为是最佳实践。

是否在所有modelview中(在示例的情况下,UserModelView()属性具有List的国家?

2 个答案:

答案 0 :(得分:1)

我会创建一个部分视图,负责只渲染国家/地区列表。然后,可以在一个地方进行对列表呈现方式的任何更改。我将创建一个模型类,封装调用服务以获取国家/地区。假设国家/地区列表是相当静态的,您可以处理模型类中信息的缓存,以减少对服务的调用和更好的性能。下面是模型中一个方法的示例,该方法从服务器缓存中获取国家/地区列表(如果可用)。

    const string cacheId = "deliveryZones";

    public List<DeliveryZoneVO> GetDeliveryZones()
    {
        List<DeliveryZoneVO> deliveryZones = (List<DeliveryZoneVO>)HttpRuntime.Cache.Get(cacheId);
        if (deliveryZones == null)
        {
            deliveryZones = service.GetDeliveryZones().ToList();
            System.Web.HttpContext.Current.Cache.Insert(cacheId, deliveryZones);
        }
        return deliveryZones;

    }

答案 1 :(得分:1)

这是一件好事,因为这类问题是从BaseController派生的controller类,以及从中派生的所有其他控制器。

BaseController中的

只将静态List<CountryVO>属性设置为getter,这样它将被初始化一次,并且可以被所有控制器和视图访问(如果你使用{{{ 1}}或ViewModel)。


示例:

ViewBag