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

我之前在转发器中完成了这个任务并且它已经工作了。 但是,我无法在正常的网页表单中找到以下内容。 图像显示为断开的链接,我在代码隐藏中的断点不会被触发。

(在aspx文件中)

<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl='btnRunReport.png' /> 

(代码隐藏)

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

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

有什么想法吗?

谢谢!

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

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

希望它可以帮助别人。

干杯

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

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

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

  

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

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

我给你另一种解决方案。 使用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"]; } } } 

expressionArray1GenerateLink函数的输入数组。 您可以根据函数的输入参数数量更改数组的大小

2.在webconfig中注册表达式

       

3.在视图中你可以使用新的表达式:

  

4.享受!!!