【发布时间】:2012-05-09 20:25:16
【问题描述】:
我是 C# 新手,我有疑问,
我有一个 Web 服务 (webservice1),其中有一个类.. 该类有一个枚举..
public class testnum
{
public enum test
{
[Description("1,2,3")]
123,
[Description("3,4,5")]
345,
[Description("6,7,8 ")]
678,
}
}
我正在尝试为 Web 服务创建一个客户端,并希望将枚举描述绑定到下拉列表,并将枚举值绑定到它们各自的列表项...我正在尝试类似
protected void ddl1_Load(object sender, EventArgs e)
{
webservice1.Service s = new webservice1.Service();
foreach( webservice1.test value in Enum.GetValues(typeof(webservice1.test)))
{
ddl1.Items.Add(new ListItem(value.GetEnumDescription(), value.ToString()));
}
}
}
public static class ENUMHelper
{
public static string GetEnumDescription(this Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes =
(DescriptionAttribute[])fi.GetCustomAttributes(
typeof(DescriptionAttribute),
false);
if (attributes != null &&
attributes.Length > 0)
return attributes[0].Description;
else
return value.ToString();
}
}
当我这样做时,它不会将描述放入下拉列表中..而不是它获取值..
谁能告诉我我哪里出错了??
我什至查看了.NET databinding a combobox to a string enum with Description attributes,但在我的情况下它不起作用..有人可以帮忙吗。
PS:如果我不清楚,请告诉我,我再次解释我的问题!
【问题讨论】:
-
客户端将拥有一个包含
test枚举类型的服务引用。查看生成的 .cs 代码,看看它是否保留了Description属性。在我看来,它似乎没有。在这种情况下,您需要采用另一种方式。一种方法是尝试在客户端项目中包含描述test的源文件,而不是让它生成对其的服务引用。这样,Description属性仍然存在。请注意,这意味着它将在客户端进行硬编码,这可能并不总是与服务器匹配。 -
我在哪里可以看到服务参考.. 我只有 service.disco 和 service.wsdl :( 抱歉我现在.. 如果问题太愚蠢.. 我非常抱歉 :( 可以请告诉我?
-
在解决方案资源管理器窗口中,单击显示所有文件按钮。您应该在同一区域看到一个 .cs 文件。或者在 Windows 资源管理器中打开您的 ref 文件夹并查找它。
标签: c# web-services enums drop-down-menu