2014-04-02 108 views
1
[DataContract] 
    public enum TargetDatabase 
    { 
     [EnumMember(Value = "US")] 
     US = 0, 
     [EnumMember(Value = "Canada")] 
     Canada = 1 
    } 

This Works!Enum.Tostring返回int而不是字符串

<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()); 

OR

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

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

Test.aspx的?客户端Id = 1 & DB = 1

,但我想

Test.aspx的?客户端Id = 1 & DB =加拿大

谁知道为什么C#会产生一个代替一个字符串值?枚举存储在web服务上,但在一些地方这是有效的,有些地方则不行。

MSDN文档:

格式参数可以包含 “G” 或 “G”, “d” 或 “d”, “X” 或 “x”,和 “F” 或 “F” 格式字符串。 如果格式为空或空字符串(“”),则使用通用格式说明符(“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 
+0

” ...在一些地方这是有效的,有些地方则没有。“它在哪里工作,它不在哪里?大概它在你的问题中显示的'ItemTemplate'中不起作用,但是你有没有例子说明它在ASPX视图中的工作方式? – J0e3gan

+1

@ J0e3gan好电话我实际上发布了一个工作,所以我更新了问题,包括一个不工作。希望有帮助 –

回答

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); 

...,改变第二格式项实例(第2 {0})......到第2格式项({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

@MicahArmantrout:我发现简约定律通常规定宇宙 - 至少,至少在调试和排除故障时似乎是这样;而我们最聪明的人有时会绊倒最简单的东西......我们一直盯着太久。一旦我们的代码所依赖的某个假设不可靠,那么它就会变得盲目。是的,第二双眼睛往往是对这些不幸现实的平衡。很高兴帮助,并且无后顾之忧。 – J0e3gan