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

本文关键字:字符串 属性 数据绑定 本地化 | 更新日期: 2023-09-27 17:53:38

我在ItemTemplates中声明了许多comparevalidator,像这样:

<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的绑定表达式。格式和ASP。NET的autogen强类型资源类,用于在绑定表达式中本地化错误消息。事实证明,您可以访问这些类(以及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 %>' />