C# 循环浏览页面上的所有按钮并指定新的文本值

C# 循环浏览页面上的所有按钮并指定新的文本值,c#,asp.net,foreach,C#,Asp.net,Foreach,我有一个页面,页面上有几个按钮,这些按钮分配了相同的文本,我正在根据用户的浏览器文化将页面本地化为不同的语言。我希望能以编程的方式循环使用它们,并动态地重新标记它们。这是我尝试过的,它会导致asp页面错误: foreach (Button s in Page.Controls) { if (s.Text =="search") { s.Text = "buscar"; } } 并非所有页面控件都是按钮。试试这个 foreach (Button s in P

我有一个页面,页面上有几个按钮,这些按钮分配了相同的文本,我正在根据用户的浏览器文化将页面本地化为不同的语言。我希望能以编程的方式循环使用它们,并动态地重新标记它们。这是我尝试过的,它会导致asp页面错误:

foreach (Button s in Page.Controls)
{
    if (s.Text =="search")
    {
       s.Text = "buscar";
    }
}
并非所有页面控件都是按钮。试试这个

foreach (Button s in Page.Controls.OfType<Button>())

另一方面,我完全同意@Jason Evans的观点,即这不是管理字符串本地化的正确方法。我在第一次阅读

中忽略了你想做的核心,你可能想考虑使用,而不是循环通过控件。例如,在资源文件就绪的情况下,您可以定义如下按钮:

我们的想法是,对于您希望支持的每种语言和文化,您都将有一个resx文件,并且每个文件将包含相同的标签,例如btnSave,但具有不同的文本值

我强烈建议您查看资源文件,因为从长远来看,它们将证明对您来说更灵活。

这样做

foreach(Control c in Page.Controls)
{
    Button b = c as Button;
    if(b!=null)
    {
       //do stuff
    }
}

老实说,我没有机会准确地捕捉到错误是什么,我必须还原代码,以便其他人可以继续在页面上工作。我将给出目前为止给出的答案,如果由于某种原因它不起作用,我将重现错误。这似乎是一种更好的方法。目前,我可能会使用@ClaudioRedi的方法对其进行黑客攻击,使其立即启动并工作,并在不久的将来将其重构为资源文件。标记为答案,因为从长远来看,这可能是一种更好的方法来完成我所追求的任务。我对其他有帮助的帖子也投了更高的票。这也不会在子控件中递归找到按钮。实际上,我无法像帖子中那样让它正常工作,但我对它做了一些调整,以满足我的需要。