将参数传递给用户控件

时间:2009-11-11 15:49:57

标签: c# .net asp.net .net-3.5 user-controls

我们正在尝试本地化我们的用户控件,基本上我们希望能够做到这样的事情:

<in:Banner runat="server" ID="banners" Lang="fr" />

我们这样做的方式是按页面级别将其发送给master,然后将其发送给控件:

protected void Page_Load(object sender, EventArgs e)
{
    Master.Lang = "FR";
}

然后在MasterPage.master中我们做这样的事情:

<in:Banner runat="server" ID="banners" Lang="<%= Lang %>" />

该主页有一个名为Lang的公共财产。

在控件中,我们设置了一个包含默认语言的字段和一个设置语言的proprety(Lang)。似乎无论我们做什么,当前语言都不会从页面发送到用户控件...任何帮助?

2 个答案:

答案 0 :(得分:1)

不完全相同,但您可以将内容页面视为母版页中的控件,因此页面的页面加载可能会在该用户控件的页面加载之前执行。

无论如何,为什么不将ui文化设置为asp.net线程(可能来自global.asax),并使用控件中的文件。

另一个选择是拥有一个单独的类,您可以在其中保存当前语言,并公开更改事件......即使负载不同,您也可以确保使用正确的语言 - 或者稍后改变语言事件。

答案 1 :(得分:1)

您可以在MasterPage的代码隐藏中访问它,就像这样

public void SetLanguage(string language)
{
    banners.Lang = language; //banners is an ID reference to your user control.
}

或者在你的标记中我认为你可以这样做

<in:Banner runat="server" ID="banners" Lang='<%# Bind("Lang") %>' />

我应该提到Bind可以在.Net 2.0及更高版本中使用。