使用ASP.NET中的函数设置imageURL

时间:2010-07-19 05:28:35

标签: c# asp.net imagebutton

我之前在转发器中完成了这项任务并且它已经工作了。但是,我无法通过正常的webforms页面获得以下内容。图像显示为断开的链接,我在代码隐藏中放置的断点不会被触发。

(在aspx文件中)

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

(代码隐藏)

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

这是我尝试的第二种方法,在另一种方法中,我尝试将imagename作为字符串传递,并且它会以这种方式返回整个链接。仍然没有运气!

有什么想法吗?

谢谢!

[编辑]感谢大家的帮助。最后,在方便的提示之后,我发现了一个递归片段,其功能如下:

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);
    ...

希望它可以帮助别人。

干杯

3 个答案:

答案 0 :(得分:6)

首先,就像Zachary提到的那样,你正在使用代码块进行数据绑定。

其次,正如您已经尝试过的那样,使用内联表达式(<%= %>)在您的情况下不起作用,因为您不能对服务器标记的任何属性使用内联表达式。

您可以做的是使用HTML语法定义图像按钮,省略runat="server"标记,并使用内联表达式来获取图像的URL:

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

内联表达式的作用是,它使用Response.Write()之间的值作为参数调用<%= %>,例如<%= this.MyVar %>Response.Write(this.MyVar)

答案 1 :(得分:2)

您的语法用于数据绑定,&lt;%#%&gt;。如果您只是尝试使用内联c#,则应使用&lt;%=%&gt;。

答案 2 :(得分: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"];
        }
    }
    }
    
  2. expressionArray1GenerateLink函数的输入数组。您可以根据函数的输入参数数量更改数组的大小

    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.Enjoy !!!