索引和长度必须指向字符串中的位置?

时间:2011-09-13 07:24:56

标签: .net asp.net vb.net

我正在尝试获取前50个字母,因此我使用subString函数来获取它。

正如您所看到的,我使用此代码来获取它:

<%# Eval("BannerDescription").ToString.Substring(1, 50)%>

但不幸的是它无法正常工作,并且会出现错误信息:

  

索引和长度必须指代字符串中的位置。

还有其他方法可以修复吗?

因为用户是控制数据输入的人!有时候他会输入10个字母,其他时间可能是1000个字母,所以我怎么能解决这个问题?

我尝试了所有这些,但我们可以这样使用它:

<%# IIf(Eval("BannerDescription").ToString().Length > 49, Eval("BannerDescription").ToString().Substring(0, 49), Eval("BannerDescription"))%>

感谢。

7 个答案:

答案 0 :(得分:19)

也许是这样的事情 -

<%# Eval("BannerDescription").ToString().Substring(0, Math.Min(Eval("BannerDescription").ToString().Length, 50)) %>

答案 1 :(得分:3)

<%# new string(Eval("BannerDescription").ToString().Take(50).ToArray()) %>

答案 2 :(得分:1)

你应该能够实现一个功能,如果它太长,它会给你一个更短的版本:

<%
    Function ShortVersion (strData, strLen)
        If Len (strData) > strLen Then
            ShortVersion = Left (strData, strLen)
        Else
            ShortVersion = strData
        End If
    End Function
%> 

答案 3 :(得分:1)

注意:此答案适用于,因为在发布此答案时问题具有此特定标记。


这将为您提供不超过50个字符:

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

更好的是,在代码隐藏(.cs)中引入一个可以在标记中引用的受保护方法:

标记:

<%# GetStringMaxLength(Eval("BannerDescription").ToString(), 50) %>

代码隐藏:

protected static string GetStringMaxLength(string text, int maxLength)
{
    if (string.IsNullOrEmpty(text))
    {
        return string.Empty;
    }

    if (text.Length > maxLength)
    {
        return text.Substring(0, maxLength);
    }

    return text;
}

这样看起来更干净。 : - )

答案 4 :(得分:1)

如果这是您的问题,并且您使用的是.NET 3.5,则可以尝试:

public static class StringEx
{
    public static string SubstringNE(this string str, int index, int length)
    {
        if (index >= str.Length) 
        {
            return String.Empty;
        }

        if (index + length > str.Length)
        {
            return str.Substring(index);
        }

        return str.Substring(index, length);
    }
}

您以与Substring相同的方式调用它,但它不会抛出错误的索引/长度。举个例子:<%# Eval("BannerDescription").ToString().SubstringNE(1, 50)%>NE用于“无异常”。

答案 5 :(得分:0)

50比结果字符串的长度更长,如果这是真的话,你的代码在所有情况下都会失败。您不能提供比其中的字符数量更大的参数。 使用String.Length属性进行操作,该属性将为您提供字符串中的字符数。因此,如果您的String超过50个字符(或等于50),您可以说您将获得前50个字符,否则您只能获得小于50个字符的整个字符串。

您可以使用此代码:

Eval(“BannerDescription”)。ToString()。长度&gt; 49? Eval(“BannerDescription”)。ToString()。SubString(0,49):Eval(“BannerDescription”)。ToString()

此致 彼得

答案 6 :(得分:0)

使用以下代码段,我在我的项目中多次使用它。

<%# Eval("BannerDescription").ToString().Length <= 22 ? Eval("BannerDescription") : string.Format("{0}....", Eval("BannerDescription").ToString().Substring(0,22))%>