1: [ExpressionPrefix("WebResourceUrl")]
2: public class WebResourceUrlExpressionBuilder : ExpressionBuilder
3: {
4: public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, Object parsedData, ExpressionBuilderContext context)
5: {
6: if (String.IsNullOrEmpty(entry.Expression) == true)
7: {
8: return (new CodePrimitiveExpression(String.Empty));
9: }
10: else
11: {
12: String[] parts = entry.Expression.Split(',');
13:
14: if (parts.Length == 2)
15: {
16: return (new CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeTypeReferenceExpression(this.GetType()), "GetWebResourceUrl"), new CodePrimitiveExpression(parts[0]), new CodePrimitiveExpression(parts[1])));
17: }
18: else
19: {
20: return (new CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeTypeReferenceExpression(this.GetType()), "GetWebResourceUrl"), new CodePrimitiveExpression(entry.Expression)));
21: }
22: }
23: }
24:
25: public override Object ParseExpression(String expression, Type propertyType, ExpressionBuilderContext context)
26: {
27: if (String.IsNullOrEmpty(expression) == true)
28: {
29: return (base.ParseExpression(expression, propertyType, context));
30: }
31: else
32: {
33: String[] parts = expression.Split(',');
34:
35: if (parts.Length == 2)
36: {
37: return (GetWebResourceUrl(parts[0], parts[1]));
38: }
39: else
40: {
41: return (GetWebResourceUrl(expression));
42: }
43: }
44: }
45:
46: public static String GetWebResourceUrl(String resourceName)
47: {
48: Page page = HttpContext.Current.Handler as Page;
49:
50: if (page != null)
51: {
52: Type type = page.GetType();
53:
54: if (type.Namespace == "ASP")
55: {
56: type = type.BaseType;
57: }
58:
59: return (page.ClientScript.GetWebResourceUrl(type, resourceName));
60: }
61:
62: return (String.Empty);
63: }
64:
65: public static String GetWebResourceUrl(String assemblyName, String resourceName)
66: {
67: Page page = HttpContext.Current.Handler as Page;
68:
69: if (page != null)
70: {
71: Assembly asm = Assembly.Load(assemblyName);
72:
73: if (asm != null)
74: {
75: return (page.ClientScript.GetWebResourceUrl(asm.GetExportedTypes()[0], resourceName));
76: }
77: }
78:
79: return (String.Empty);
80: }
81:
82: public override Boolean SupportsEvaluate
83: {
84: get
85: {
86: return (true);
87: }
88: }
89: }