using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using WeiSha.Common; using Song.ServiceInterfaces; using Song.Entities; using VTemplate.Engine; namespace Song.Template { public class Handler { /// /// 处理模板中的标签 /// /// 模板对象 public static void Start(TemplateDocument doc) { Song.Entities.Organization org = Business.Do().OrganCurrent(); //列表标签的处理 ElementCollection tags = doc.GetCustomTags("list,repeat"); foreach (Element item in tags) { if (item is Tag) { Tag tag = (Tag)item; //如果已经指定了数据来源,则不再继续往下走了 string from = tag.Attributes.GetValue("from"); if (!string.IsNullOrWhiteSpace(from)) continue; //如果没有数据源,则通过以下解析,指定数据源 string tagname = tag.TagName; //标签名称 string tagSpace = string.Empty; //要实现标签解析的命名空间名称 if (tagname == "list") tagSpace = "ListTag"; if (tagname == "repeat") tagSpace = "RepeaterTag"; if (tagname == "detail") tagSpace = "DetailTag"; //组件标签类的完整路径名 string classFullName = "Song.Template.Tags.{0}.{1}"; classFullName = String.Format(classFullName, tagSpace, tag.Type); Type info = System.Type.GetType(classFullName); //创建反射 if (info == null) continue; object obj = System.Activator.CreateInstance(info); //实例化标签对象 Song.Template.Tags.TagElement el = (Song.Template.Tags.TagElement)obj; if (el == null) continue; el.Organ = org; el.Type = tag.Type; el.Tag = tag; el.DataBind(); //绑定数据源 } } //注册方法 RegisterFunction.Register(doc); } } }