Evalの戻り値をビハインドコードのメソッドの引数にしたいことがあります。
例えば、以下のようなメソッドをマークアップから呼び出す場合です。
/// <summary> /// コードから表示文字列を取得します。 /// </summary> /// <param name="value">コード。</param> /// <returns>変換された文字列。</returns> protected string ConvertCodeToText(string value) { switch(value) { case "01": return "hoge"; case "02": return "fuga"; default: return "piyo"; } }
この場合、マークアップを次のように書くと、実行時エラーになります。
<asp:Label ID="Label1" runat="server" Text="<%# ConvertCodeToText(Eval("id")) %>" />
次のように明示的にキャストする必要があります。
<asp:Label ID="Label1" runat="server" Text="<%# ConvertCodeToText((string) Eval("id")) %>" />
DataBinder.Evalメソッドの戻り値がObject型だからですね。
DataBinder.Eval メソッド (Object, String) (System.Web.UI)
実行時にデータ バインド式を評価します。