Setting imageURL using a function in ASP.NET

安稳与你 提交于 2019-12-01 01:08:56

First, just like Zachary mentioned, you're using the code block for data binding.

Second, as you've already tried, using an inline expression (<%= %>) won't work either in your case, since you can't use an inline expression for any property of a server-tag.

What you could do instead is defining an image button using HTML syntax, omitting the runat="server" tag, and use the inline expression to get your image's URL:

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

What an inline expression does is, it calls Response.Write() with the value between <%= %> as the parameter, e.g. <%= this.MyVar %> is Response.Write(this.MyVar).

Your syntax is for data binding, <%# %>. If you are just trying to do inline c#, you should use <%= %>.

I give you another solution. Use ExpressionBuilder :

  1. Create a class devired from ExpressionBuilder and override function 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 is the input array for GenerateLink function. You can change the size of array according to numbers of input params for your function

2.Register your expression in webconfig

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

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

    </compilation>

3.In view your can use new expression:

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

4.Enjoy !!!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!