我正在尝试为我的 ASP.NET 代码创建本地化,但在设置 TemplateField 的 HeaderText 时遇到问题
我有这个有效
<asp:TemplateField HeaderText="Description">
<ItemTemplate>
<%# Eval("Description") %>
</ItemTemplate>
<FooterTemplate>
<asp:Panel ID="Panel5" runat="server" DefaultButton="EditSubmission">
<asp:TextBox runat="server" ID="Submission_DescriptionTxtBox" TextMode="MultiLine"
ToolTip='<%# GetById("atforbedringsforslag_description_tooltip") %>'/>
</asp:Panel>
</FooterTemplate>
</asp:TemplateField>
但我想改变
<asp:TemplateField HeaderText="Description">
至
<asp:TemplateField HeaderText='<%# GetById("atforbedringsforslag_description_title") %>'>
但后来我得到
只有具有 DataBinding 事件的对象才支持数据绑定表达式。System.Web.UI.WebControls.TemplateField 没有 DataBinding 事件。
我应该如何设置这个字段?我可以找到一些使用 OnRowCreated 的,但是您使用索引号访问字段,然后如果稍后添加新字段,则很容易出错或忘记更改索引
编辑我的解决方案:
创建了自定义表达式构建器
using System.Web.Compilation;
using System;
using System.CodeDom;
public class LocalizationExpressionBuilder : ExpressionBuilder
{
public override CodeExpression GetCodeExpression(System.Web.UI.BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
{
CodeExpression[] inputParams = new CodeExpression[] { new CodePrimitiveExpression(entry.Expression.Trim()),
new CodeTypeOfExpression(entry.DeclaringType),
new CodePrimitiveExpression(entry.PropertyInfo.Name) };
// Return a CodeMethodInvokeExpression that will invoke the GetRequestedValue method using the specified input parameters
return new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(this.GetType()),
"GetRequestedValue",
inputParams);
}
public static object GetRequestedValue(string key, Type targetType, string propertyName)
{
// If we reach here, no type mismatch - return the value
return GetByText(key);
}
//Place holder until database is build
public static string GetByText(string text)
{
return text;
}
}
将前缀添加到我的 web.config
<system.web>
<compilation debug="true" defaultLanguage="c#" targetFramework="4.0">
<expressionBuilders>
<add expressionPrefix="localizeByText" type ="LocalizationExpressionBuilder"/>
</expressionBuilders>
</compilation>
</system.web>
我现在可以像这样得到我的文字
<asp:TemplateField HeaderText='<%$ localizeByText:Some text %>'>