我希望有人可以帮助我。我有以下自定义服务器控件:
[ParseChildren(true)]
public class MyControl : WebControl, INamingContainer
{
[PersistenceMode(PersistenceMode.InnerProperty)]
public string MyProperty
{
get;set;
}
}
它与以下标记完美配合:
<acme:MyControl runat="sever">
<MyProperty>Test String</MyProperty>
</acme:MyControl>
但是如果我尝试本地化属性字符串,我会得到一个解析错误:
<acme:MyControl runat="sever">
<MyProperty><%=(string)GetLocalResourceObject("MyResourceKey") %></MyProperty>
</acme:MyControl>
即使我转换类型,ASP.NET也表示该属性不能接受控件作为子项。如果我想要本地化它,表达式应该如何?我可以将属性作为控件标签的属性进行访问,但我更喜欢上面的标记,它看起来更优雅和干净。
由于
答案 0 :(得分:0)
添加名为MyPropertyResourceKey
的第二个属性,因此您的最终代码为:
[ParseChildren(true)]
public class MyControl : WebControl, INamingContainer
{
[PersistenceMode(PersistenceMode.InnerProperty)]
public string MyProperty
{
get;set;
}
string _propertyResourceKey;
[PersistenceMode(PersistenceMode.InnerProperty)]
public string MyPropertyResourceKey
{
get {
return _propertyResourceKey;
}
set {
_propertyResourceKey = value;
MyProperty = (string)GetLocalResourceObject(_propertyResourceKey);
}
}
}
编辑: 根据评论,似乎也可能需要更灵活的方法。通常,如果您要为控件分配动态值,则需要创建数据绑定控件(如果适用)http://msdn.microsoft.com/en-us/library/ms366540.aspx。
另一方面,如果控件不知道通常如何分配它,则接受的方法是在页面的代码隐藏中分配属性值。