我之前在转发器中完成了这项任务并且它已经工作了。但是,我无法通过正常的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);
...
希望它可以帮助别人。
干杯
答案 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:
创建一个源自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.Enjoy !!!