0

我认为返回数据集,在前端应用程序中使用数据集和数据表是一个相当糟糕的主意。因此,借助泛型的魔力,我通过 Web 服务调用返回了一个泛型列表(不是 WCF,只是普通的 ol'asmx)。只要您需要在每次调用 Web 服务时返回一个列表,这种方法就很有效。

我遇到的情况是我有一个更复杂的屏幕,其中有一些下拉菜单等等。我需要将这些下拉列表绑定到一个通用列表。问题是我不想打几个网络电话,每个下拉一个,来获取我的数据。在过去,我只会返回一个数据集并将下拉列表绑定到数据集中的特定表。

因此,在一次网络调用中返回多个通用列表将是超级棒的。

我尝试过的事情:

  1. 使用列表列表
  2. 使用通用列表的集合
  3. 创建一个基类并使用 Collection 时List<Base>,在尝试将对象填充到其中时会出现转换问题List<Base>
  4. 创建一个具有返回List<MyOneObject>,List<MySecondObject>等属性的类。这行得通,但有点乱......我在应用程序中有很多类和屏幕会发生这种情况。我可以创建一个这样的List<MyType>类,每个类都有一个属性,但就像我说的那样,我认为这可能会失控。

所以此时我有两个选项,上面列表中的#4,或者只返回一个我不想做的数据集:0)

有没有人遇到过这个?

4

4 回答 4

3

好吧,我不认为返回多个列表是一个好主意,但如果你要这样做,我会创建一个包装类,每个列表都作为该类中的属性公开。

就像是

class Wrapper
{
   public List<object1> Object1List {get;set;}
   public List<object1> Object2List {get;set;}

}
于 2009-06-25T12:13:36.040 回答
0

答案是#4,通过一个类,无论是那个还是多个调用,你宁愿不这样做

于 2009-06-25T12:17:20.650 回答
0

好吧,看来我今天所有的答案都是从一个问题开始的?你为什么不想在幕后打多个电话?

如果您使用一个异步调用 på 下拉/控件,您需要绑定您将获得更流畅的用户体验。(对于大型独立列表尤其如此)仅仅是因为如果您只进行一次调用,所有下拉/控制将需要等待所有其他控制数据返回。

话虽这么说:如果您返回的列表的长度彼此接近,您可以使用字典,使用键来表示“属性名称”,使用值来很好地表示值。很少的代码需要并且将任何源代码转换为带有 .ToDictionary() 的字典非常简单(如果源不是 IEnumerable 为该源实现 .ToDictionary() 通常是直接的)

于 2009-06-25T12:31:58.220 回答
0

鉴于您的情况,我会说以 XML 格式返回结果将是最好的方法。您不仅可以返回任意数量的列表,还可以以任何方式组织它们,最重要的是,这将是一个与语言无关的通用解决方案。您还可以将结果集直接转换为 xml。

如果您返回一个 .NET 类,则仅限于调用该服务的 .NET 语言,如果发生更改,您将不得不重新编写包装类等。使用 XML,您可以从任何语言调用该服务。因此,如果您试图将前端应用程序与数据/模型层分离,这将是一个不错的选择。

如果您愿意,您仍然可以将 XML 结果反序列化为 .NET 类,或者直接提取数据。LINQ to XML 快速且易于使用,并且允许您在需要时转换结果。

<result>
  <dropdownA_item>
     <Value/>
  </dropdownA_item>
  <dropdownA_item>
  <dropdownA_item>
  <dropdownB_item>
  <dropdownB_item>
  <dropdwonC_item>
  // return as many different lists for as many different drop downs
</result>

// manually extract the data or deserialize into .net class
XElement result = GetResult();
dropdownBox[x].Items = result // you could even have an array of dropDownBoxes[x] and bind to all of them in one loop
    .Where(o => o.Name == "dropdown" + x)
    .Select(o => o.Element("Value").Value) );
于 2012-06-03T09:08:41.490 回答