代码之家  ›  专栏  ›  技术社区  ›  Glinkot

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

  •  2
  • Glinkot  · 技术社区  · 14 年前

    我以前在中继器中完成过这项任务,现在已经成功了。但是,我无法让下面的内容在普通的Web表单页面中为我工作。图像显示为断开的链接,我放入代码隐藏中的断点不会被触发。

    (在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 回复  |  直到 10 年前
        1
  •  6
  •   Giuseppe Accaputo    14 年前

    首先,正如Zachary提到的,您使用代码块进行数据绑定。

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

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

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

    内联表达式的作用是调用 Response.Write() 值介于 <%= %& gt; 作为参数,例如 <%= this.MyVar %> Response.Write(this.MyVar) .

        2
  •  2
  •   Zachary    14 年前

    您的语法用于数据绑定,<%%>。如果您只是尝试执行内联C,则应使用<%=%>。

        3
  •  1
  •   Trung Nguyen    10 年前

    我给你另一个解决办法。使用 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、享受!!!!