2

私は以前にリピーター内でこのタスクを実行しましたが、機能しました。ただし、通常のWebフォームページでは、以下を機能させることができません。画像は壊れたリンクとして表示され、コードビハインドに配置したブレークポイントはトリガーされません。

(aspxファイル内)

<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl='<%# GetImageDirectory()%>btnRunReport.png'  />

(コードビハインド)

public string GetImageDirectory()
{
    return "~/App_Variants/LBSX/images/";
}

これは私が試した2番目の方法であり、もう1つの方法では、画像名を文字列として渡すことを試みました。これにより、リンク全体がそのように返されます。まだ運がない!

何かご意見は?

ありがとう!

[編集]皆さんの助けに感謝します。最後に、便利なヒントの後で、次のようにトリックを実行する再帰スニペットを見つけました。

private void UpdateImages(Control Parent)
{
    foreach (Control c in Parent.Controls)
    {
        ImageButton i = c as ImageButton;
        if (i != null)
        {
            i.ImageUrl = "~/App_Variants/LBSX/images/" + i.ImageUrl;
        }
        if (c.HasControls())
        {
            UpdateImages(c);
        }
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    UpdateImages(Page);
    ...

それが他の誰かを助けることを願っています。

乾杯

4

3 に答える 3

6

まず、Zachary が述べたように、データ バインディングにコード ブロックを使用しています。

次に、すでに試した<%= %>ように、サーバータグのプロパティにインライン式を使用できないため、インライン式 ( ) を使用しても機能しません。

代わりにできることは、HTML 構文を使用して画像ボタンを定義し、runat="server"タグを省略し、インライン式を使用して画像の URL を取得することです。

<input type="image" src="<%= GetImageDirectory() %>btnRunReport.png" name="image" />

インライン式が行うことは、 is などのパラメータとしてResponse.Write()between の値を使用して呼び出すことです。<%= %><%= this.MyVar %>Response.Write(this.MyVar)

于 2010-07-19T07:04:00.723 に答える
2

構文はデータバインディング用です、<%#%>。インラインc#を実行しようとしているだけの場合は、<%=%>を使用する必要があります。

于 2010-07-19T05:37:52.043 に答える
1

別の解決策を提供します。ExpressionBuilderを使用します。

  1. ExpressionBuilder から派生したクラスを作成し、関数 GetCodeExpression をオーバーライドします

     namespace your.namespace
    {
    public class CustomBuilder : ExpressionBuilder
    {
        public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
        {
            Type type1 = entry.DeclaringType;
            PropertyDescriptor descriptor1 = TypeDescriptor.GetProperties(type1)[entry.PropertyInfo.Name];
            CodeExpression[] expressionArray1 = new CodeExpression[1];
            expressionArray1[0] = new CodePrimitiveExpression(entry.Expression.Trim());
    
            String temp = entry.Expression;
            return new CodeCastExpression(descriptor1.PropertyType, new CodeMethodInvokeExpression(new
           CodeTypeReferenceExpression(base.GetType()), "GenerateLink", expressionArray1));
        }
        public static  String GenerateLink(String link)
        {
            return ConfigurationManager.AppSettings["MediaPath"] + link + "?ver=" + ConfigurationManager.AppSettings["MediaCode"];
        }
    }
    }
    

expressionArray1関数の入力配列ですGenerateLink。関数の入力パラメータの数に応じて配列のサイズを変更できます

2.webconfigに式を登録する

<system.web>
    <compilation debug="true" targetFramework="4.0" >
      <expressionBuilders>

        <add expressionPrefix="GenLink" type="your.namespace.CustomBuilder"/>
      </expressionBuilders>

    </compilation>

3. ビューでは、新しい式を使用できます。

<asp:ImageButton ID="ImageButton1" runat="Server" ImageUrl='<%$ GenLink:images/magnifier.jpg %>'/>

4.お楽しみください!!!

于 2014-01-08T10:21:19.173 に答える