2016-06-30 5 views
1

私はこのように、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> 

エラーメッセージが表示され、ツールチップのプロパティは、現在、適切な検証のフィードバックを構築するために、文字列フラグメントでバインドされたデータ値を結合しています。これらの検証メッセージをローカライズし、他のアイテムプロパティにデータバインディングを保持したいと思います。これを達成する最良の方法は何ですか?背後

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

あなたはあなたができることについてですが、GridViewの中でこれを実装OnRowDataBoundイベントにコードを実行するには:

HTMLを

+0

https://msdn.microsoft.com/en-us/library/ms227427.aspx –

+0

@GlennFerrie私はすでに地元の暗黙的な使用しています他のローカライズされたテキストのリソース。私はどのようにデータバインディング式にリソースを埋め込む/参照するかわかりません。 – Hydrargyrum

答えて

0

string.FormatとASP.NETのautogen'd厳密に型指定された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 %>' /> 
ます。また、「リソース」を使用することを検討すべきである
1

コード内の他のプロパティのいずれかを設定します。私はそれがあなたに大きな粒度を与えることがわかります。

+0

これをCompareValidatorのすべてのインスタンス*の背後にあるコードでどのように適用すればよいですか? CompareValidatorは、ViewGrid ItemTemplateの一部であるため、最終HTMLに複数のコピーがあります(ViewGridの1行に1つ) – Hydrargyrum

+0

すべてのインスタンスでそれを実装する方法の変更された答えをご覧ください。 – Michael

0

私のやり方は、対応する値をメモリにキャッシュし、コントロールのIDと関連するセッションキー(またはベースが何であれ)と一致させて値を割り当てます。

関連する問題