public void RenderNews(Template template)
        {
            //根据模板块里定义的type属性条件取得新闻数据
            List <News> newsData = NewsDbProvider.GetNewsData(template.Attributes.GetValue("type"));

            //设置变量newsdata的值
            template.Variables.SetValue("newsdata", newsData);

            //取得模板块下Id为newslist的标签(也即是在cnblogs_newsdata.html文件中定义的foreach标签)
            Tag tag = template.GetChildTagById("newslist");

            if (tag is ForEachTag)
            {
                //如果标签为foreach标签则设置其BeforeRender事件用于设置变量表达式{$:#.news.url}的值
                tag.BeforeRender += (sender, e) =>
                {
                    ForEachTag t = (ForEachTag)sender;

                    //取得当前项的值(因为foreach标签的数据源是List<News>集合,所以当前项的值类型为News实体)
                    News news = (News)t.Item.Value;
                    //设置当前项的变量表达式的值.也即是"{$:#.news.url}"变量表达式
                    t.Item.SetExpValue("url", NewsDbProvider.GetNewsUrl(news));

                    //当新闻不可见时.你可以取消本次输出
                    if (!news.Visible)
                    {
                        e.Cancel = true;
                    }
                };
            }
        }
Пример #2
0
        /// <summary>
        /// 在标签每次呈现数据前触发的事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void Tag_BeforeRender(object sender, System.ComponentModel.CancelEventArgs e)
        {
            ForEachTag t = (ForEachTag)sender;

            #region 方法一: 根据foreach标签的Item属性取得变量
            //取得当前项的值(因为foreach标签的数据源是List<News>集合,所以当前项的值类型为News实体)
            News news = (News)t.Item.Value;
            //设置当前项的变量表达式的值.也即是"{$:#.news.url}"变量表达式
            t.Item.SetExpValue("url", NewsDbProvider.GetNewsUrl(news));
            #endregion

            #region 方法二: 直接获取news变量
            //或者也可以直接取得news变量
            //Variable newsVar = t.OwnerTemplate.Variables["news"];
            //News news = (News)newsVar.Value;
            //newsVar.SetExpValue("url", NewsDbProvider.GetNewsUrl(news));
            #endregion

            //当新闻不可见时.你可以取消本次输出
            if (!news.Visible)
            {
                e.Cancel = true;
            }
        }