视图是否只能渲染字符串的前n个

时间:2009-10-09 21:42:34

标签: asp.net-mvc

我正在渲染一个下拉列表,在下拉列表中呈现的文本太长而不舒服。如何限制下拉列表中显示的字符数而不必返回控制器?

<option value="<%=order.ID %>"><%=order.Item %></option>

THX

3 个答案:

答案 0 :(得分:3)

<%= order.Item.Length > 10 ? order.Item.Substring(0, 7) + "..." : order.Item %>

正如Dan在下面提到的那样,检查null并提取辅助方法是一个好主意。

public static class StringHelpers
{
    public static string SmartSubstring(string value, int maxLength)
    {
        if(String.IsNullOrEmpty(value))
            return String.Empty;

        if(value.Length > maxLength)
            return value.Substring(0, maxLength -3) + "...";

        return value;
    }
}

然后确保将此类包含在aspx的顶部,您可以执行以下操作:

<%= StringHelpers.SmartSubstring(Order.Item, 10) %>

答案 1 :(得分:1)

在我看来,我不喜欢很多逻辑,这种事情在整个过程中都很有用(不仅仅是在视图中)。

<option value="<%=order.ID %>"><%=order.Item.Truncate(10) %></option>

截断方法......

public static class StringExtensions
{
  public static string Truncate(this string value, int trim)
  {
    //Don't do anything if the value is null, empty, or doesn't meet our trim constraint
    if (string.IsNullOrEmpty(value) || value.Length <= trim)
    {
      return value;
    }

    return string.Format("{0}...", value.Substring(0, trim));
  }
}

<强> 警告: 我没有删掉省略号的长度。如果你愿意,你应该做一些额外的检查,以确保(trim-3)大于零。另外,你应该考虑修剪长度是否大于字符串的长度。我愿意,但我的大脑正在关闭过夜!

答案 2 :(得分:0)

在order.item上使用子字符串。如果你想要max是20个字符,那么选择与'...'连接的前17个字符