我应该使用转发器或字符串生成器来构建动态html

时间:2011-04-08 04:32:22

标签: asp.net

我认为很明显,框架需要使用将HTML保存在aspx文档中,并且代码中的所有代码都可以实现清晰的分离。

那么当GridView不够好时我们该怎么做?

我应该:

  • 使用repeater控件将HTML保留在表示层中,但强制将业务逻辑与HTML混合使用
  • 或者我应该以{{1​​}}?
  • 的形式将HTML与我的代码隐藏在一起

让我们假装您说使用StringBuilder控件。

通常要返回产品说明,我会这样做:

Repeater

但是后来我遇到的问题是什么时候我想只返回desc的150个字符,以防它太长。如果我的数据源是LINQ to SQL,我可以创建一个新字符串:

<%# DataBinder.Eval(Container.DataItem, "desc") %>

如果首选我使用string s = q.desc.lengh > 150 ? q.desc.SubString(0,150) + "..." : q.desc;,我将如何在aspx文档中的repeater内执行相同操作?

2 个答案:

答案 0 :(得分:3)

我会使用Repeater,使代码中的html变得混乱且难以维护。

没有理由不在后面(或其他地方)的代码中使用辅助方法来执行此操作

<%# SomeMethod(Eval("desc")) %>

或者您正在重复的类的属性,有一个带有getter的替代版本

public class SomeItem
{
    public string Desc { get; set; }

    public string DescSummary
    {
        get
        {
            return Desc.Length > 150 ? string.Format("{0}...", Desc.Substring(0, 150)) : Desc;
        }
    }
}

并在转发器eval DescSummary

答案 1 :(得分:2)

尝试

<%# Eval("desc").ToString().Length > 150 ? Eval("desc").ToString().Substring(0, 150) : Eval("desc") %>