gpt4 book ai didi

asp.net - 为本地化设置 TemplateField HeaderText 动态

转载 作者:行者123 更新时间:2023-12-05 01:25:17 24 4
gpt4 key购买 nike

我正在尝试为我的 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 expressions are only supported on objects that have a DataBinding event. System.Web.UI.WebControls.TemplateField does not have a DataBinding event.



我应该如何设置这个字段?我可以找到一些使用 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 %>'>

最佳答案

您可以构建自己的自定义 Expression Builder调用您的GetById方法。查看以下链接,了解如何构建表达式构建器以及如何使用它的旧但很好的文章:

http://www.4guysfromrolla.com/articles/022509-1.aspx

当你有一个表达式生成器时,你可以将它与 <%$ 一起使用。句法。这与数据绑定(bind)语法 <%# 不同。 .

对于 HeaderText 字段,不允许使用 DataBinding 语法(不知道为什么,但这就是 MS 的做法)。允许使用表达式语法,并且在您完成自定义表达式构建器后将起作用。

一定要浏览我链接的页面,它有很多文字,但最终让你表达构建器不会花费太多精力......

此外,该页面底部有一个链接,指向作者制作的表达式构建器库。看看它们,也许其中一个可以直接用于解决您的问题(特别是 CodeExpressionBuilder )。

关于asp.net - 为本地化设置 TemplateField HeaderText 动态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11394060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com