我正在尝试将CDN用于我网站上的图像.问题是,有时我有服务器控件,如ImageButton,我想使用一个类,以完全提取CDN的路径.为此,我试着做:
<asp:ImageButton runat="server" OnClick="Agree" ImageUrl="<%=ResourceManager.GetImageCDN("iagree.png")%>" />
Run Code Online (Sandbox Code Playgroud)
我得到的标题是错误的.
只有当我使用<%#时它才会起作用(并且只有在我进行数据绑定时).我怎么能这么容易做到?如何在我的标记代码上放置CDN代码?
谢谢!
Nic*_*ick 24
如果将来其他人遇到此线程,您可以通过使用单引号而不是双引号来包围服务器标记来获得所需的结果.
原本的:
<asp:ImageButton runat="server" OnClick="Agree" ImageUrl="<%=ResourceManager.GetImageCDN("iagree.png")%>" />
Run Code Online (Sandbox Code Playgroud)
新版本:
<asp:ImageButton runat="server" OnClick="Agree" ImageUrl='<%=ResourceManager.GetImageCDN("iagree.png")%>' />
Run Code Online (Sandbox Code Playgroud)
这适用于.Net 4.0,但我认为它也适用于其他版本.
Ric*_*kNZ 23
有四个选项(除了" <%# %>"样式数据绑定,我不推荐):
最佳选择取决于您的应用程序的要求,但如果您想在站点范围内进行更改,我通常更喜欢控制适配器.
这是一个例子,如果它有帮助:
using System;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.Adapters;
namespace Sample
{
public class ImageButtonControlAdapter : WebControlAdapter
{
protected override void BeginRender(HtmlTextWriter writer)
{
ImageButton image = this.Control as ImageButton;
if ((image != null) && !String.IsNullOrEmpty(image.ImageUrl))
{
//
// Decide here which objects you want to change
//
if (!image.ImageUrl.StartsWith("http") &&
!image.ImageUrl.StartsWith("data:"))
{
image.ImageUrl = ResourceManager.GetImageCDN(image.ImageUrl);
}
}
base.BeginRender(writer);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用App_Browers/adapter.browser中的以下条目将其配置到您的应用程序中:
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.ImageButton"
adapterType="Sample.ImageButtonControlAdapter" />
</controlAdapters>
</browser>
</browsers>
Run Code Online (Sandbox Code Playgroud)
你的标记是:
<asp:ImageButton runat="server" OnClick="Agree" ImageUrl="iagree.png" />
Run Code Online (Sandbox Code Playgroud)
很酷,对吧?
Tim*_*ora 12
您可以通过创建自己的代码表达式生成器来评估服务器标记中的代码.这很简单.
[ExpressionPrefix( "Code" )]
public class CodeExpressionBuilder : ExpressionBuilder
{
public override CodeExpression GetCodeExpression( BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context )
{
return new CodeSnippetExpression( entry.Expression );
}
}
Run Code Online (Sandbox Code Playgroud)
并在web.config中输入一个条目:
<compilation debug="true" targetFramework="4.0">
<expressionBuilders>
<add expressionPrefix="Code" type="[YourNamespace].CodeExpressionBuilder"/>
</expressionBuilders>
</compilation>
Run Code Online (Sandbox Code Playgroud)
这允许您使用如下语法:
<asp:ImageButton runat="server" ImageUrl='<%$ Code:ResourceManager.GetImageCDN("iagree.png") %>'>
Run Code Online (Sandbox Code Playgroud)
以下是完整的解释:http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx
| 归档时间: |
|
| 查看次数: |
43604 次 |
| 最近记录: |