如何本地化数据绑定字符串 属性?

How do I localise a data-bound string property?

我在 ItemTemplates 中声明了许多 CompareValidators,如下所示:

<asp:CompareValidator
    runat="server"
    ID="ValueMinValidator"
    Display="Dynamic"
    Text="*"
    ForeColor="Red"
    ErrorMessage='<%# Eval("Description") + " below minimum " + Eval("Minimum") %>'
    Tooltip='<%# Eval("Description") + " below minimum " + Eval("Minimum") %>'
    ControlToValidate="Value"
    ValueToCompare='<%# Eval("Minimum") %>'
    Operator="GreaterThanEqual"
    Type="Double"
    Enabled='<%# Eval("Minimum") != null %>' meta:resourcekey="ValueMinValidatorResource1"></asp:CompareValidator>

错误消息和工具提示属性当前正在将绑定数据值与字符串片段结合起来以构建适当的验证反馈。我想本地化这些验证消息,同时仍保留与其他项目属性的数据绑定。实现此目标的最佳方法是什么?

要在 gridview 中实现它,运行 OnRowDataBound 事件的代码。:

HTML:

<asp:GridView ID="gvData" AutoGenerateColumns="false" runat="server" OnRowDataBound="gvData_RowDataBound">

后面的代码:

protected void gvData_RowDataBound(object sender, GridViewRowEventArgs e)
{
    DataObject dataObject;
    CompareValidator valueMinValidator;
    string description, errorMessage;

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        dataObject = (DataObject)e.Row.DataItem;
        valueMinValidator = (CompareValidator)e.Row.FindControl("ValueMinValidator");
        description = dataObject.Description;
        errorMessage = string.Format("{0} below minimum {1}", description, dataObject.Minimum); //localize dataObject.Minimum as needed
        valueMinValidator.ErrorMessage = errorMessage;
        valueMinValidator.ToolTip = errorMessage;
    }
}

您可以在后面的代码中设置任何其他属性。我发现它为您提供了更大的粒度。

我的做法是将相应的值缓存到内存中,并与控件 ID 和相关会话密钥(或任何你的基础)匹配,然后分配值。

我最终编写了一个绑定表达式,该表达式使用 string.Format 和 ASP.NET 的自动生成的强类型资源 class,以在绑定表达式中本地化错误消息。事实证明,您可以在绑定表达式的上下文中访问那些 classes(以及 TemplateControl.GetGlobalResource 和 TemplateControl.GetLocalResource)。因为我不需要双向绑定,所以这就足够了。

示例配置:

<asp:CompareValidator
    runat="server"
    ID="ValueMinValidator"
    Display="Dynamic"
    Text="*"
    ForeColor="Red"
    ErrorMessage='<%# String.Format(Resources.MyResources.ValueLessThanMinimum, Eval("Description"), Eval("Minimum", "{0:"+ Eval("Format") + "}")) %>'
    Tooltip='<%# String.Format(Resources.MyResources.ValueLessThanMinimum, Eval("Description"), Eval("Minimum", "{0:"+ Eval("Format") + "}")) %>'
    ControlToValidate="Value"
    ValueToCompare='<%# Eval("Minimum") %>'
    Operator="GreaterThanEqual"
    Type="Double"
    Enabled='<%# Eval("Minimum") != null %>' />