2017-02-28 75 views
2

我们internatializing(SP?)这个设置多个标签具有相同的文字

labelPhone.Text = (string)GetGlobalResourceObject("lang", "Phone") + ":"; 

不过,如果有更多的标签,我要重复:

labelPhone2.Text = (string)GetGlobalResourceObject("lang", "Phone") + ":"; 
labelPhone3.Text = (string)GetGlobalResourceObject("lang", "Phone") + ":"; 

这可以避免吗?

如jQuery给予所有identival标签同一类,然后将文本分配到该类:

$(".phonelabel").text("Telefon:"); 
+0

有你检查了ASP.NET本地化如何工作?你*不需要设置单独的标签。你可以直接引用资源键,例如:'Text =“<%$ Resources:Label1TextKey%>”'。您也可以为特定字段使用*模板*,例如包含本地化标签和字段的电话模板。 –

+0

'GetGlobalResourceObject'从哪里来?你有没有尝试过使用[资源文件](https://msdn.microsoft.com/en-us/library/fw69ke6f.aspx)? –

回答

0

在C#中,你可以这样执行单个语句分配:

labelPhone.Text = labelPhone2.Text = labelPhone3.Text = 
(string)GetGlobalResourceObject("lang", "Phone") + ":"; 

,或者你可以做它在一个循环:

Label[] labels = new[] { labelPhone, labelPhone2, labelPhone3 }; 
Array.ForEach(labels, x => { x.Text = 
      (string)GetGlobalResourceObject("lang", "Phone") + ":"; }); 
+0

好吧,我会首先参加,不过我宁愿我能够添加新的电话标签,而不必将其添加到任务列表中。 –

+0

我不认为你可以检查出来 - http://stackoverflow.com/questions/19417839/setting-multiple-variables-in-one-line –

+0

@LeifNeland你有没有检查过本地化如何在ASP.NET中工作?你*不需要设置单独的标签,也不需要在代码隐藏中进行设置。 –

0

你可以使用这种扩展方法。使用

public static class ControlExtensions 
{ 
    public static void ForControls<T>(this Control ctrl, Func<T, bool> where, Action<T> action) where T : Control 
    { 
     if (ctrl is T) 
      if (where(ctrl as T)) 
       action(ctrl as T); 
     foreach (Control childControl in ctrl.Controls) 
     { 
      childControl.ForControls(where, action); 
     } 
    } 
} 

..

  this.ForControls<Label>(
      // you can define any other condition 
      c => c.ID.StartsWith("labelPhone"), 
      // you can make any other process for this controll 
      c => c.Text = (string)GetGlobalResourceObject("lang", "Phone") + ":"); 
0

由于帕纳约蒂斯写:

<asp:Label runat="server" Text="<%$ Resources:Lang, Phone %> " CssClass="box" /> 

如果注释是一个答案,我会选择它作为优胜者;-)

相关问题