Enum.Tostring返回int而不是string

时间:2014-04-02 13:10:04

标签: asp.net enums

 [DataContract]
    public enum TargetDatabase
    {
       [EnumMember(Value = "US")]
        US = 0,
       [EnumMember(Value = "Canada")]
        Canada = 1
    }

这个有效!

   <telerik:GridTemplateColumn HeaderText="Service Code" ReadOnly="True" SortExpression="ServiceCode"
                                    UniqueName="colServiceCode">
                                    <ItemTemplate>
                                        <asp:HyperLink class="linkGreenBoldUnderlined" ID="lnkServiceCode" runat="server"
                                            Text='<%# DataBinder.Eval(Container.DataItem, "ServiceCode")%>' NavigateUrl='<%# String.Format("~/Test.aspx?ServiceId={0}DB={1}", DataBinder.Eval(Container.DataItem, "ServicesID"), TargetSystem) %>'></asp:HyperLink>
                                    </ItemTemplate>

在这背后的代码中无效

linkClient.NavigateUrl = String.Format("~/Test.aspx?ClientId={0}&DB={0}", client.Client.ID, TargetSystem.ToString());

linkClient.NavigateUrl = String.Format("~/Test.aspx?ClientId={0}&DB={0}", client.Client.ID, TargetSystem);

当我使用上面的代码时,我得到了

Test.aspx?ClientId = 1&amp; DB = 1

但我想要

Test.aspx文件客户端Id = 1&安培; DB =加拿大

任何人都知道为什么C#会生成一个而不是字符串值?枚举存储在web服务上,但在某些地方这是有效的,有些地方却没有。

MSDN文档:

格式参数可以包含“G”或“g”,“D”或“d”,“X”或“x”以及“F”或“f”格式字符串。 如果format为null或空字符串(“”),则使用通用格式说明符(“G”)。

示例

enum Colors {Red, Green, Blue, Yellow = 12};
Console.WriteLine("myColor.ToString(\"G\") = {0}", myColor.ToString("G"));

myColor.ToString("g") = Yellow
myColor.ToString("G") = Yellow

2 个答案:

答案 0 :(得分:1)

在每个不起作用的例子中......

linkClient.NavigateUrl = String.Format("~/ClientAdmin.aspx?ClientId={0}&DB={0}", client.Client.ID, TargetSystem.ToString());

linkClient.NavigateUrl = String.Format("~/Test.aspx?ClientId={0}&DB={0}", client.Client.ID, TargetSystem);

...,将第二个格式项实例(第二个{0})...更改为第二个格式项({1})而不是第一个格式项({0} ):

linkClient.NavigateUrl = String.Format("~/ClientAdmin.aspx?ClientId={0}&DB={1}", client.Client.ID, TargetSystem.ToString());

linkClient.NavigateUrl = String.Format("~/Test.aspx?ClientId={0}&DB={1}", client.Client.ID, TargetSystem);

答案 1 :(得分:0)

您可以使用GetName方法

请参阅:http://msdn.microsoft.com/en-us/library/system.enum.getname(v=vs.110).aspx

Enum.GetName(typeof(TargetDatabase), TargetSystem)