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

时间:2016-06-30 14:08:05

标签: c# asp.net model-binding

我在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>

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

3 个答案:

答案 0 :(得分:1)

要在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;
    }
}

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我最终编写了一个绑定表达式,该表达式使用了string.Format和ASP.NET的autogen&#strong类型的Resource类来本地化绑定表达式中的错误消息。事实证明,您可以在绑定表达式的上下文中访问这些类(以及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 %>' />